使用 cookie 简化登陆操作

  通过selenium库请求拿到目标网站的cookie,然后用cookie去请求目标网站,可以省略登陆操作

以微博为例,先获取登陆的cookie:

 1 import time
 2 import json
 3 from selenium import webdriver
 4 from selenium.webdriver.support.ui import WebDriverWait
 5 from selenium.webdriver.support import expected_conditions as ec
 6 from selenium.webdriver.common.by import By
 7 
 8 
 9 def save_cookie(the_cookie):  #  直接将获取的cookie保存到json文件
10     with open('sina_cookie.txt', 'w') as f:
11         json.dump(the_cookie, f)
12 
13 
14 def save_cookies(the_cookies):  #  传入的数据是 :将获取到的cookie用字典保存它的 name 和 value
15     with open('sina_cookies.txt', 'w') as f:
16         f.write(json.dumps(the_cookies))
17 
18 
19 driver = webdriver.Chrome()
20 driver.get('https://passport.weibo.cn/signin/login?entry=mweibo&res=wel&wm=3349&r=http%3A%2F%2Fm.weibo.cn%2F')
21 driver.maximize_window()
22 
23 WebDriverWait(driver, 20).until(ec.presence_of_element_located((By.XPATH, '//*[@id="loginName"]')))
24 
25 try:
26     username = driver.find_element_by_xpath('//*[@id="loginName"]')
27     username.clear()
28     username.send_keys('用户名')
29     time.sleep(1.3)
30     pwd = driver.find_element_by_xpath('//*[@id="loginPassword"]')
31     pwd.clear()
32     pwd.send_keys('密码')
33     time.sleep(2)
34     driver.find_element_by_xpath('//*[@id="loginAction"]').click()
35     WebDriverWait(driver, 20).until(ec.presence_of_element_located((By.XPATH, '//p[@data-node="title"]')))
36     print(driver.find_element_by_xpath('//p[@data-node="title"]'))
37 
38     cookie = driver.get_cookies()
39     cookies = {}
40     for item in cookie:
41         cookies[item.get('name')] = item.get('value')
42     save_cookie(cookie)
43     print('cookie:\n', cookie)
44     save_cookies(cookies)
45     print('cookies:\n', cookies)
46 except Exception as e:
47     print(e)
48     pass
49 finally:
50     driver.close()

  使用requests请求时带上cookie,可以直接登陆首页而不需要设置登陆操作。这里可能出问题,可以采用:

在请求之前一定要先请求一下目标网站。

 1 import json
 2 import requests
 3 
 4 with open('sina_cookies.txt') as f:
 5     cookies = json.load(f)
 6     print(cookies)
 7 
 8 url = 'https://weibo.cn'
 9 result = requests.get(url, cookies=cookies)
10 print(result.text)
11 if '用户名' in result.text:
12     print('cookie调试成功')

这里要注意的是我们drvier.get_cookies()获取到的cookie信息是如下的形式:

  

 

posted @ 2018-04-26 16:06  巴蜀秀才  阅读(1758)  评论(0编辑  收藏  举报