Python3 使用selenium库登陆知乎并保存cookie为本地文件

Posted StrivePy

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Python3 使用selenium库登陆知乎并保存cookie为本地文件相关的知识,希望对你有一定的参考价值。

Python3 使用selenium库登陆知乎并保存cookie为本地文件

学习使用selenium库模拟登陆知乎,并将cookie保存为本地文件,然后供以后(requests模块)使用,用selenium模拟登陆时,比较顺利,没有碰到需要验证码的情况,代码放在一个名为cookiesload.py模块中:

 

 1 # -*- coding: utf-8 -*-
 2 
 3 from selenium.webdriver import Chrome
 4 from selenium.webdriver.support import expected_conditions as EC
 5 from selenium.webdriver.common.by import By
 6 from selenium.webdriver.support.ui import WebDriverWait
 7 from selenium.common.exceptions import TimeoutException
 8 from settings import *
 9 import time
10 import os
11 import json
12 
13 
14 def zhihu_login():
15     # 知乎登陆url
16     login_url = \'https://www.zhihu.com/signup?next=%2F\'
17     brower = Chrome()
18     # 设置浏览器窗口最大化
19     brower.maximize_window()
20     # 响应等待时间
21     wait = WebDriverWait(brower, 5)
22     brower.get(login_url)
23     try:
24         # 模拟点击最下方那个登陆链接书,跳转到账号密码登陆界面
25         login_switch = wait.until(EC.element_to_be_clickable((By.XPATH, \'//*[@id="root"]/div/main/div/div/div/div[2]/div[2]/span\')))
26         login_switch.click()
27         # 模拟输入用户名
28         username_input = wait.until(EC.presence_of_element_located((By.XPATH, \'//*[@id="root"]/div/main/div/div/div/div[2]/div[1]/form/div[1]/div[2]/div[1]/input\')))
29         username_input.send_keys(USERNAME)
30         # 模拟输入密码
31         password_input = wait.until(EC.presence_of_element_located((By.XPATH, \'//*[@id="root"]/div/main/div/div/div/div[2]/div[1]/form/div[2]/div/div[1]/input\')))
32         password_input.send_keys(PASSWORD)
33         # 模拟点击登陆按钮
34         login_button = wait.until(EC.element_to_be_clickable((By.XPATH, \'//*[@id="root"]/div/main/div/div/div/div[2]/div[1]/form/button\')))
35         login_button.click()
36         time.sleep(5)
37         # 获取cookies
38         cookies = brower.get_cookies()
39         # 保存cookies为本地文件
40         savecookies(cookies)
41     except TimeoutException:
42         # 如果捕获到超时异常则递归调用自己
43         zhihu_login()
44 
45 
46 def savecookies(cookies):
47     path = os.getcwd() + \'/cookies/\'
48     if not os.path.exists(path):
49         os.makedirs(path)
50     with open(path + \'cookies.txt\', \'w\') as f:
51         cookie = json.dumps(cookies)
52         f.write(cookie)
53 
54 
55 if __name__ == \'__main__\':
56     zhihu_login()

由于个人习惯,用了一个settings.py配置模块:

1 # 用户名
2 USERNAME = \'173866016XX\'
3 
4 # 密码
5 PASSWORD = \'XXX\'

执行完毕后,会在当前工作目录生成一个名为cookies的文件夹,cookies.txt文件在该文件夹中。在cookie没有过期的情况下,以后要访问知乎就可以不用再登陆了,直接加载该cookie文件即可。

上面使用的Chrome浏览器的有界面模式,如果不想让浏览器直接在后台运行,不弹出界面,可以这样:

1 from selenium.webdriver.chrome.options import Options
2 
3 options = Options()
4 options.add_argument(\'--headless\')
5 brower = Chrome(options=options)

更详细的写法可以参考:https://www.cnblogs.com/z-x-y/p/9026226.html

 

以上是关于Python3 使用selenium库登陆知乎并保存cookie为本地文件的主要内容,如果未能解决你的问题,请参考以下文章

php登录知乎并发表文章

Python3 使用requests库读取本地保存的cookie文件实现免登录访问

Python爬虫 —— 知乎之selenium模拟登陆+requests.Session()获取cookies

Python模拟登陆万能法-微博|知乎

Python用selenium模拟登录知乎,输完验证码以后点击登录,验证码收了起来却不进主页为啥

知乎模拟登陆