爬虫需要登陆怎么办?这份python登陆代码请收下
模拟登陆思路
通过selenium中的webdriver控制浏览器登录目标网站,然后获取模拟登陆需要的Cookie,再利用此Cookie来达到登录的效果。本次我们使用webdriver来驱动火狐浏览器插件。在登录网站时,cookie保存在发起请求的客户端中,网站服务器利用cookie来区分不同的客户端。cookie里面记录了“访问登录后才能看到的页面”这一行为的信息,含有能够向服务器证明:“我刚才登录过”。因此cookie可以用来标识客户端的身份,以存储它的信息。
登录步骤
导入模块
1 from selenium import webdriver 2 import requests 3 import json
启动浏览器
通过webdriver驱动火狐浏览器,然后在加载将要访问的目标网站
1 driver = webdriver.Firefox() 2 driver.get('目标网站')
点击登录
找到网页中登录按钮所在的位置,通过浏览器模拟点击打开登录框,然后找到用户名和密码框的位置,输入用户名及密码,在寻找按钮以及密码输入框时可鼠标右键然后找到“查看元素”选项,点击之后可在网页源码中寻找。
代码如下:
1 #清空登录框 2 driver.find_element_by_xpath("./*//input[@name='username']").clear() 3 #自动填入登录用户名 4 driver.find_element_by_xpath("./*//input[@name='username']").send_keys(user) 5 #清空密码框 6 driver.find_element_by_xpath("./*//input[@name='password']").clear() 7 #自动填入登录密码 8 driver.find_element_by_xpath("./*//input[@name='password']").send_keys(password) 9 time.sleep(8) 10 #点击登录按钮进行登录 11 driver.find_element_by_xpath("./*//button[@name='loginsubmit']").click() 12 time.sleep(10)
记录cookie
经过上面几步,如果没有报错的话就说明已经登录成功了,接下来我们再次加载网页获取登录cookie。
代码如下:
1 driver.get('目标网站') 2 #获取cookies 3 cookie_items = driver.get_cookies() 4 for cookie_item in cookie_items: 5 post[cookie_item['name']] = cookie_item['value'] 6 cookie_str = json.dumps(post) 7 with open('cookie.txt', 'w', encoding='utf-8') as f: 8 f.write(cookie_str) 9 f.close()
通过cookie登录
获得cookie之后,模拟登陆就跟之前一样用requests请求网站,只需要将cookie内容加到请求中即可。
代码如下:
1 header = {"User-Agent": "Mozilla/5.0 (Windows NT 6.1; WOW64;rv:53.0) Gecko/20100101 Firefox/53.0"} 2 with open('cookie.txt', 'r', encoding='utf-8') as f: 3 cookie = f.read() 4 cookies = json.loads(cookie) 5 res = requests.get(url=url, cookies=cookies, headers=header)
对于有些网站来说,cookie的生命期较长,所以在第一次登陆获取cookie后,在以后模拟登陆时只需要调用此cookie即可,十分方便。
具体代码如下:
1 from selenium import webdriver 2 import time 3 import json 4 5 user="用户名" 6 password="密码" 7 8 driver = webdriver.Firefox() 9 driver.get('目标网站') 10 time.sleep(5) 11 driver.find_element_by_xpath("./*//button[@type='submit']").click() 12 print("正在输入用户名和密码") 13 #清空登录框 14 driver.find_element_by_xpath("./*//input[@name='username']").clear() 15 #自动填入登录用户名 16 driver.find_element_by_xpath("./*//input[@name='username']").send_keys(user) 17 #清空密码框 18 driver.find_element_by_xpath("./*//input[@name='password']").clear() 19 #自动填入登录密码 20 driver.find_element_by_xpath("./*//input[@name='password']").send_keys(password) 21 22 time.sleep(8) 23 #点击登录按钮进行登录 24 driver.find_element_by_xpath("./*//button[@name='loginsubmit']").click() 25 time.sleep(10) 26 driver.get('目标网站') 27 #获取cookies 28 cookie_items = driver.get_cookies() 29 30 #获取到的cookies是列表形式,将cookies转成json形式并存入本地名为cookie的文本中 31 for cookie_item in cookie_items: 32 post[cookie_item['name']] = cookie_item['value'] 33 cookie_str = json.dumps(post) 34 with open('cookie.txt', 'w', encoding='utf-8') as f: 35 f.write(cookie_str) 36 f.close() 37 print("登录完成")