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