爬虫需要登陆怎么办?这份python登陆代码请收下
模拟登陆思路
通过selenium中的webdriver控制浏览器登录目标网站,然后获取模拟登陆需要的Cookie,再利用此Cookie来达到登录的效果。本次我们使用webdriver来驱动火狐浏览器插件。在登录网站时,cookie保存在发起请求的客户端中,网站服务器利用cookie来区分不同的客户端。cookie里面记录了“访问登录后才能看到的页面”这一行为的信息,含有能够向服务器证明:“我刚才登录过”。因此cookie可以用来标识客户端的身份,以存储它的信息。
登录步骤
导入模块
from selenium import webdriver
import requests
import json
启动浏览器
通过webdriver驱动火狐浏览器,然后在加载将要访问的目标网站
driver = webdriver.Firefox()
driver.get('目标网站')
点击登录
找到网页中登录按钮所在的位置,通过浏览器模拟点击打开登录框,然后找到用户名和密码框的位置,输入用户名及密码,在寻找按钮以及密码输入框时可鼠标右键然后找到“查看元素”选项,点击之后可在网页源码中寻找。
代码如下:
#清空登录框
driver.find_element_by_xpath("./*//input[@name='username']").clear()
#自动填入登录用户名
driver.find_element_by_xpath("./*//input[@name='username']").send_keys(user)
#清空密码框
driver.find_element_by_xpath("./*//input[@name='password']").clear()
#自动填入登录密码
driver.find_element_by_xpath("./*//input[@name='password']").send_keys(password)
time.sleep(8)
#点击登录按钮进行登录
driver.find_element_by_xpath("./*//button[@name='loginsubmit']").click()
time.sleep(10)
记录cookie
经过上面几步,如果没有报错的话就说明已经登录成功了,接下来我们再次加载网页获取登录cookie。
代码如下:
driver.get('目标网站')
#获取cookies
cookie_items = driver.get_cookies()
for cookie_item in cookie_items:
post[cookie_item['name']] = cookie_item['value']
cookie_str = json.dumps(post)
with open('cookie.txt', 'w', encoding='utf-8') as f:
f.write(cookie_str)
f.close()
通过cookie登录
获得cookie之后,模拟登陆就跟之前一样用requests请求网站,只需要将cookie内容加到请求中即可。
代码如下:
header = {"User-Agent": "Mozilla/5.0 (Windows NT 6.1; WOW64;rv:53.0) Gecko/20100101 Firefox/53.0"}
with open('cookie.txt', 'r', encoding='utf-8') as f:
cookie = f.read()
cookies = json.loads(cookie)
res = requests.get(url=url, cookies=cookies, headers=header)
对于有些网站来说,cookie的生命期较长,所以在第一次登陆获取cookie后,在以后模拟登陆时只需要调用此cookie即可,十分方便。
具体代码如下:
from selenium import webdriver
import time
import json user="用户名"
password="密码" driver = webdriver.Firefox()
driver.get('目标网站')
time.sleep(5)
driver.find_element_by_xpath("./*//button[@type='submit']").click()
print("正在输入用户名和密码")
#清空登录框
driver.find_element_by_xpath("./*//input[@name='username']").clear()
#自动填入登录用户名
driver.find_element_by_xpath("./*//input[@name='username']").send_keys(user)
#清空密码框
driver.find_element_by_xpath("./*//input[@name='password']").clear()
#自动填入登录密码
driver.find_element_by_xpath("./*//input[@name='password']").send_keys(password) time.sleep(8)
#点击登录按钮进行登录
driver.find_element_by_xpath("./*//button[@name='loginsubmit']").click()
time.sleep(10)
driver.get('目标网站')
#获取cookies
cookie_items = driver.get_cookies() #获取到的cookies是列表形式,将cookies转成json形式并存入本地名为cookie的文本中
for cookie_item in cookie_items:
post[cookie_item['name']] = cookie_item['value']
cookie_str = json.dumps(post)
with open('cookie.txt', 'w', encoding='utf-8') as f:
f.write(cookie_str)
f.close()
print("登录完成")
爬虫需要登陆怎么办?这份python登陆代码请收下的更多相关文章
- 干货 | 请收下这份2018学习清单:150个最好的机器学习,NLP和Python教程
机器学习的发展可以追溯到1959年,有着丰富的历史.这个领域也正在以前所未有的速度进化.在之前的一篇文章中,我们讨论过为什么通用人工智能领域即将要爆发.有兴趣入坑ML的小伙伴不要拖延了,时不我待! 在 ...
- JAVA工程师必学技能,进阶&涨薪的推进器!这份实战教程请收下
Netty 作为互联网中间件的基石,是 JAVA 工程师进阶为高级程序员必备的能力之一.也是目前是互联网中间件领域使用最广泛最核心的网络通信框架. Netty是一个高性能.异步事件驱动的NIO框架,它 ...
- Python的22个编程技巧,请收下!
1. 原地交换两个数字 Python 提供了一个直观的在一行代码中赋值与交换(变量值)的方法,请参见下面的示例: x,y= 10,20 print(x,y) x,y= y,x print(x,y) # ...
- 这份Koa的简易Router手敲指南请收下
上一期链接--也就是本文的基础,参考KOA,5步手写一款粗糙的web框架 本文参考仓库:点我 Router其实就是路径匹配,通过匹配路径,返回给用户相应的网站内容. 以下方例子为例,主要通过提取req ...
- 购买二手iPhone需要注意什么?这份避坑指南请收好!
iPhone二手机市场一直非常火热,有时甚至出现供不应求的情况.主要是因为新机的价格不便宜,没什么性价比,很多小伙伴会选择低价购买二手iPhone,价格基本只要新机的二到五折.不过二手机的水深相信大家 ...
- Python登陆人人网
#!coding:utf-8 import urllib2 import urllib import cookielib def renrenBrower(url,user,password): #登 ...
- 非常全的一份Python爬虫的Xpath博文
非常全的一份Python爬虫的Xpath博文 Xpath 是 python 爬虫过程中非常重要的一个用来定位的一种语法. 一.开始使用 首先我们需要得到一个 HTML 源代码,用来模拟爬取网页中的源代 ...
- python登陆,注册小程序
def login(username,password): ''' 用于用户登录 :param username: 用户输入用户名 :param password: 用户输入密码 :return: T ...
- python登陆接口编写
#coding:utf-8 import getpass,sys i=0 j=0 while i<3: username=raw_input('username:') #输入用户名 life_1 ...
随机推荐
- 直径问题 Diameter Problems
2019-11-03 21:37:59 一.Diameter of Binary Tree 问题描述: 问题求解: 解法一.第一反应是树上动归,每个节点保存一下左右的最大深度,最后以每个节点作为中枢计 ...
- 数据源管理 | 主从库动态路由,AOP模式读写分离
本文源码:GitHub·点这里 || GitEE·点这里 一.多数据源应用 1.基础描述 在相对复杂的应用服务中,配置多个数据源是常见现象,例如常见的:配置主从数据库用来写数据,再配置一个从库读数据, ...
- 我的Keras使用总结(4)——Application中五款预训练模型学习及其应用
本节主要学习Keras的应用模块 Application提供的带有预训练权重的模型,这些模型可以用来进行预测,特征提取和 finetune,上一篇文章我们使用了VGG16进行特征提取和微调,下面尝试一 ...
- Downgrade ASM DATABASE_COMPATIBILITY (from 11.2.0.4.0 to 11.2.0.0.0) on 12C CRS stack.
使用Onecommand完成快速Oracle 12c RAC部署后 发现ASM database compatibilty无法设置,默认为11.2.0.4.0. 由于我们还有些数据库低于这个版本,所以 ...
- [ASP.NET Core MVC] 如何实现运行时动态定义Controller类型?
昨天有个朋友在微信上问我一个问题:他希望通过动态脚本的形式实现对ASP.NET Core MVC应用的扩展,比如在程序运行过程中上传一段C#脚本将其中定义的Controller类型注册到应用中,问我是 ...
- Luogu 1008 三连击
题目背景 本题为提交答案题,您可以写程序或手算在本机上算出答案后,直接提交答案文本,也可提交答案生成程序. 题目描述 将1,2, \cdots ,91,2,⋯,9共99个数分成33组,分别组成33个三 ...
- JS同步和异步的理解
js的同步和异步问题通常是指ajax的回调,如果是同步调用,程序在发出ajax调用后就会暂停,直到远程服务器产生回应后才会继续运行.而如果是异步调用,程序发出ajax调用后不会暂停,而是立即执行后面的 ...
- java+lodop+vue+热敏打印机,打印图片
1.根据需求生成图片模板,详情见 https://www.cnblogs.com/xiaokangk/p/11151774.html 2.下载lodop并进行安装(安装步骤详情百度) 3.安装热敏打印 ...
- python 爬虫:学爬虫必学的正则表达式
文章更新于:2020-03-30 一.语法格式 1.非打印字符 操作符 说明 实例 \cx 匹配由x指明的控制字符 \cM 匹配一个 Control-M 或回车符.x 的值必须为 A-Z 或 a-z ...
- linux 配置 python3 CGI
文章更新于:2020-03-04 注1:安装 python 参见: python 的安装使用和基本语法 注2:配置 web 环境参见: Windows&linux使用集成环境搭建 web 服务 ...