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

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

 # -*- coding: utf-8 -*-

 from selenium.webdriver import Chrome
from selenium.webdriver.support import expected_conditions as EC
from selenium.webdriver.common.by import By
from selenium.webdriver.support.ui import WebDriverWait
from selenium.common.exceptions import TimeoutException
from settings import *
import time
import os
import json def zhihu_login():
# 知乎登陆url
login_url = 'https://www.zhihu.com/signup?next=%2F'
brower = Chrome()
# 设置浏览器窗口最大化
brower.maximize_window()
# 响应等待时间
wait = WebDriverWait(brower, 5)
brower.get(login_url)
try:
# 模拟点击最下方那个登陆链接书,跳转到账号密码登陆界面
login_switch = wait.until(EC.element_to_be_clickable((By.XPATH, '//*[@id="root"]/div/main/div/div/div/div[2]/div[2]/span')))
login_switch.click()
# 模拟输入用户名
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')))
username_input.send_keys(USERNAME)
# 模拟输入密码
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')))
password_input.send_keys(PASSWORD)
# 模拟点击登陆按钮
login_button = wait.until(EC.element_to_be_clickable((By.XPATH, '//*[@id="root"]/div/main/div/div/div/div[2]/div[1]/form/button')))
login_button.click()
time.sleep(5)
# 获取cookies
cookies = brower.get_cookies()
# 保存cookies为本地文件
savecookies(cookies)
except TimeoutException:
# 如果捕获到超时异常则递归调用自己
zhihu_login() def savecookies(cookies):
path = os.getcwd() + '/cookies/'
if not os.path.exists(path):
os.makedirs(path)
with open(path + 'cookies.txt', 'w') as f:
cookie = json.dumps(cookies)
f.write(cookie) if __name__ == '__main__':
zhihu_login()

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

 # 用户名
USERNAME = '173866016XX' # 密码
PASSWORD = 'XXX'

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

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

 from selenium.webdriver.chrome.options import Options

 options = Options()
options.add_argument('--headless')
brower = Chrome(options=options)

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

Python3 使用selenium库登陆知乎并保存cookie为本地文件的更多相关文章

  1. 【接口自动化】selenium库也有大用场(获取cookie)

    相信有些童鞋在做接口.或者说接口自动化测试的过程中会遇到这样的场景:测试的接口,必须是需要登录后才能发起请求成功的. 那么怎么解决呢? 本着团队协作的精神,我们就去让开发同学开个后门,给你个" ...

  2. python3 selenium模拟登陆斗鱼提取数据保存数据库

    # coding=utf-8from selenium import webdriverimport jsonimport timeimport pymongo class Douyu: def __ ...

  3. python3 引入selenium库报错ModuleNotFoundError: No module named 'selenium'

    解决方法: pip install -U selenium

  4. python3、selenium、autoit3,通过flash控件上传文件

    autoit.au3 #include <Constants.au3> WinWait(); //暂停执行脚本,直到上传对话框出现 WinActive("打开") Wi ...

  5. Python3.X Selenium 自动化测试中如何截图并保存成功

    在selenium for python中主要有三个截图方法,我们挑选其中最常用的一种. 挑最常用的:get_screenshot_as_file() 相关代码如下:(下面的代码可直接复制) # co ...

  6. selenium+python自动化测试系列(二):AutoIt工具实现本地文件上传

    AutoIt使用简单说明 AutoIt的安装这里就不在啰嗦,可以参考AutoIt安装或者自行搜索解决. 第一步:定位上传文件路径的文本框 这里举例说明,如何定位?如图 这里我们看到上传文件的类型是bu ...

  7. Python3 Scrapy + Selenium + 阿布云爬取拉钩网学习笔记

    1 需求分析 想要一个能爬取拉钩网职位详情页的爬虫,来获取详情页内的公司名称.职位名称.薪资待遇.学历要求.岗位需求等信息.该爬虫能够通过配置搜索职位关键字和搜索城市来爬取不同城市的不同职位详情信息, ...

  8. Python爬虫之selenium库使用详解

    Python爬虫之selenium库使用详解 本章内容如下: 什么是Selenium selenium基本使用 声明浏览器对象 访问页面 查找元素 多个元素查找 元素交互操作 交互动作 执行JavaS ...

  9. 使用OKHttp模拟登陆知乎,兼谈OKHttp中Cookie的使用!

    本文主要是想和大家探讨技术,让大家学会Cookie的使用,切勿做违法之事! 很多Android初学者在刚开始学习的时候,或多或少都想自己搞个应用出来,把自己学的十八般武艺全都用在这个APP上,其实这个 ...

随机推荐

  1. ubuntu下访问支付宝官网,安装安全控件

    (1)根据支付宝提示下载安装控件的压缩包 aliedit.tar.gz (2)解压安装 (3)重启浏览器就可以了

  2. OpenWRT mt7620n 系统升级引起的问题

    版权声明:本文为博主原创文章,未经博主同意不得转载. https://blog.csdn.net/qianguozheng/article/details/27237175 OpenWRT系统升级採用 ...

  3. IDEA Generate pojo(data first)基于 spring data jpa - code

    基于 idea 的 pojo生成 右侧菜单栏 Database->New( + 图标)->Data source-> mysql(根据自己的数据源选择) 使用: 代码如下: POJO ...

  4. rest异常框架

    好的工具:postman 教程:http://blog.csdn.net/ye1992/article/details/49998511 RuntimeMXBean是Java 虚拟机的运行时系统的管理 ...

  5. [Err] 1067 - Invalid default value for 'xxxTime'

    下面是导入sql脚本的的局部脚本 `xxxTime` timestamp NOT NULL DEFAULT '0000-00-00 00:00:00', 发现是NO_ZERO_IN_DATE,NO_Z ...

  6. C语言通过地址传递参数

    // 正确 #include <stdio.h> struct para { int a; int b; }; struct para test = { .a = , .b = , }; ...

  7. php单链表实现

    php单链表实现 <?php //单链表 class Hero{ public $no; public $name; public $nickname; public $next=null; f ...

  8. HDOJ5876(补图的最短路)

    Sparse Graph Time Limit: 4000/2000 MS (Java/Others)    Memory Limit: 262144/262144 K (Java/Others)To ...

  9. (转)使用PowerDesigner生成HTML功能

    本文转载自:http://www.cnblogs.com/CowboyProgrammer/archive/2009/04/28/1445423.html 使用PowerDesigner设计数据库关系 ...

  10. 【转】Jmeter笔记:响应断言详解

    平时我们使用jmeter进行性能测试时,经常会用到断言.jmeter提供了很多种断言,本来想全都写一下,但发现每一个断言里面的东西都很多,所以就先写一下我们经常使用的响应断言. 第一次在cnblog上 ...