爬虫需要登陆怎么办?这份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("登录完成")

 

posted @ 2019-09-02 14:42  charseki  阅读(1867)  评论(0编辑  收藏  举报