zoukankan      html  css  js  c++  java
  • 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

  • 相关阅读:
    mongodb复制集配置
    replication set复制集
    CentOS 6.5下源码安装MySQL 5.6
    10个最常见的 HTML5 面试题及答案
    Javascript中document.execCommand()的用法
    javascript 准确的判断类型方法
    getUserMedia API
    javascript
    C++ 面试题
    C++
  • 原文地址:https://www.cnblogs.com/strivepy/p/9233389.html
Copyright © 2011-2022 走看看