知乎cookies的介绍_Requestium = Requests + Selenium
这个框架是我在知乎「Python有哪些常见的、好用的爬虫框架?」的高赞答案中看到的,试着用了一下,还挺好玩。
下面的内容主要来自Requestsium
的GitHub上的介绍:https://github.com/tryolabs/requestium,少量是我自己的测试代码。
定位
Requestium
是集Requests
和Selenium
于一体的WEB自动化工具。Requestium
可以看作是在Requests
为主体的基础上增加了Selenium
的部分功能,如果你需要一个以Selenium
为主体,增加部分Requests
功能的Python库,可以去看一下 另一个叫做Selenium-Requests
的库。
Requestium
最主要的特性是能够在保持当前Web会话的同时,允许在Requests的Session和Selenium的Webdriver之间切换。
安装方法
pip install requestium
使用方法
对于能够熟练使用Requests
和Selenium
的人来说,学习Requestium
几乎没有什么成本(Requestium
的源码一共也只有400多行)。如果不熟悉的话还是要先去学这两个库,最好的学习资料就是它们的官方文档。
首先创建一个session,初始化参数包含webdriver
的路径,浏览器,timeout时限,以及webdriver
所需参数。
from requestium import Session, Keyss = Session(webdriver_path='./chromedriver',browser='chrome',default_timeout=15,webdriver_options={'arguments': ['headless']})
至于浏览器,Requestium
只支持PhantomJS
和Chrome
,鉴于PhantomJS
已死,作者短时间内没有更新这个上次commit是2018年2月的库,我们可以认为Requestium
只支持Chrome
,当然自己写一个支持其他浏览器的版本也并非难事。
和Requests
不同,我们不需要手动解析收到的响应,当调用xpath,css,re的时候,解析会自动完成,例如这样:
title = s.get('http://samplesite.com').xpath('//title/text()').extract_first(default='Default Title')
Requestium
的session对象本质上就是Requests
的session对象,所以它原本自带的方法都可以用:
s.post('http://www.samplesite.com/sample', data={'field1': 'data1'})
s.proxies.update({'http': 'http://10.11.4.254:3128', 'https': 'https://10.11.4.252:3128'})
也可以切换到webdriver
模式来运行js代码:
s.transfer_session_cookies_to_driver() # You can maintain the session if needed
s.driver.get('http://www.samplesite.com/sample/process')
Requestium
的session.driver对象本质上就是Selenium
的driver对象,所以它原本自带的方法都可以用:
s.driver.find_element_by_xpath("//input[@class='user_name']").send_keys('James Bond', Keys.ENTER)# New method which waits for element to load instead of failing, useful for single page web apps
s.driver.ensure_element_by_xpath("//div[@attribute='button']").click()
除了原本自带的函数,Requestium
的session.driver对象还有xpath,css,re方法,可以用来定位:
if s.driver.re(r'ID_dwd some_pattern'):print('Found it!')
切换回session模式同样简单:
s.transfer_driver_cookies_to_session()
s.post('http://www.samplesite.com/sample2', data={'key1': 'value1'})
ensure 方法
Requestium
的另一大特点是增加了一系列ensure
方法,可以确保driver确实发现了指定元素或者转移了cookie。
如果使用的是Selenium
的 find_element_by_
方法,一旦driver没有发现我们想要的元素,就会立刻抛出一个异常。而Requestium
则会等待这个元素的出现。下面是四个Requestium
可以等待的状态:
- present (默认)
- clickable
- visible
- invisible (例如等待loading... 消失)
一些对比的例子
官网上的一个例子:登录Reddit
使用Requestium
时的代码量只有使用Requests + Selenium + lxml
的一半。(可不是嘛,你把好多try...except
都用ensure
封装起来了 )。
一个例子——用Requestium登录浙大通行证
霏霏:【JS逆向】模拟登录浙大通行证zhuanlan.zhihu.com
速度要慢一点,但是写起来不用动脑子。
import re
from requestium import Session, Keyslogin_url = 'https://zjuam.zju.edu.cn/cas/login'
s = Session(webdriver_path='/usr/local/bin/chromedriver',browser='chrome',default_timeout=15,webdriver_options={'arguments': ['headless']})
s.driver.get(login_url)
s.driver.find_element_by_xpath("//*[@id='username']").send_keys('')
s.driver.find_element_by_xpath("//*[@id='password']").send_keys('', Keys.ENTER)
s.transfer_driver_cookies_to_session()
resp = s.get(login_url)
print(re.search('nick: '(.*?)'', resp.text).group(1), '登录成功!')
欢迎关注~
知乎cookies的介绍_Requestium = Requests + Selenium相关推荐
- 知乎cookies的介绍_使用cookie登陆知乎
只是想说明一个问题,Cookie可以维持登录状态,有些网页当中,访问之后的cookie里面带有登陆账号,和登陆密码,这样可以使用cookie直接访问网页,如知乎,首先登录知乎,将Headers中的Co ...
- 知乎cookies的介绍_知乎更新隐私政策:不点同意可选“仅浏览”,相关数据一月内删除...
近年来,不时出现的大型互联网公司数据外泄丑闻,让人们对企业是否有能力保护自己的隐私产生了忧虑.为了赢得消费者的信任,隐私保护在当下已然成为一家公司的核心竞争力. 不久前,苹果上线隐私数据管理网站,以便 ...
- 知乎cookies的介绍_Cookie简介
客户端和服务器端进行交互,要利用http协议,但是http协议本身是没有状态的,没有记忆功能,比如连接一次,你需要录入某个账号密码,浏览器关闭这次会话就结束了,但是我们经常用到一个功能就是记住密码那个 ...
- 0.爬虫介绍及requests库的使用
1. 互联网知识介绍 互联网: 是由网络设备(网线, 路由器, 交换机, 防火墙...)和一台台计算机链接而成. 互联网建立的目的: 数据的共享/传递. 俗称的'上网': 由用户端计算机发送请求给目标 ...
- 网络爬虫requests+selenium总结
github项目:https://github.com/lei940324/toy/blob/master/笔记/网络爬虫.md 网络爬虫 selenium 常用命令总结 导入所需要的模块 from ...
- 中国土地市场网信息爬取--requests+Selenium多线程爬取
这次爬取的网站是中国土地市场信息网站https://www.landchina.com/default.aspx?tabid=263 先进行观察分析这个.发现这个网站以下有几个特点: 1.网站响应速度 ...
- (详细总结)python爬取 163收件箱邮件内容,收件箱列表的几种方法(urllib, requests, selenium)
需求:最近有一个需求,需要将163邮箱收件箱里面的所有邮件的内容全部copy下来,整理到一个word里面,不多也就28页的邮件(不要问我为什么有这需求,不告诉你),自己手动去ctrl+ cv 的话,估 ...
- Python+PyQt5+Requests+Selenium写一个在线音乐播放器
文章目录 写在前面的话 一.明确功能目标 二.UI设计 1.选择主界面 三.功能的实现 1.获取热榜. 2.随机获取四首热榜歌曲并获得封面. 3.初始化界面. 4.解析歌单. 5.播放/下载. 6.进 ...
- python requests cookies请求_python的requests库怎么发送带cookies的请求
背景: 在用robot做接口自动化时,有一个查询接口需要用到登录后返回的token等信息作为cookies作为参数一起请求(token是在返回体中,并不在cookies中), 刚好create ses ...
- python 爬虫 简单爬虫教程(requests + selenium )
最近改了实验室之前的爬虫,感觉有些生疏了,故此记录一下, 我将会通过抓取网站 https://nonfungible.com/ 来进行讲解. 目录 requests + Chrome 浏览器 使用Ch ...
最新文章
- java学习笔记:使用dom4j解析xml
- Cannot add or update a child row:
- git生成SSH-Key
- POJ 2773 欧几里得
- RocketMQ集成SpringBoot
- go环境搭建_学习的golang第一步,搭建我们运行的环境,go! go! go
- leetcode141 环形链表
- Web Service——CXF+Spring 整合
- java当前目录指什么_是什么决定了Tomcat Java进程的当前工作目录?
- 基于JAVA+SpringMVC+Mybatis+MYSQL的网上商城
- jieba库词频统计_运用jieba库进行词频统计
- LeetCode:螺旋矩阵【54】
- 视频采集以及播放的流程
- IOS中设置圆角图片
- C#调用GDAL算法进度信息传递
- 19【14】DIEN:深度兴趣演化⽹络
- 如何在iPhone、iPad和Mac上查看照片的EXIF数据?
- 利用diamond进行dbcan数据库建库并进行CAZyme注释(2022.8)
- 破解软件下载网站100个
- navicat运行db文件_在 Navicat for MongoDB 使用文档
热门文章
- python中append和insert_python append、extend与insert的区别
- python读conf配置文件完成登录_python conf配置文件
- layui框架简单解读,为什么要使用layui框架,layui框架的好处,后端程序员快速学习掌握layui框架技术型文档博文,layui学习笔记,快速掌握前端技术框架
- mysql如何只查询表中的前几条数据?多表查询前提了解
- python实现isprime函数、参数为整数、要有异常处理_Python期末复习题1
- 计算机机房维护与管理,计算机机房的管理与维护.doc
- 华为手机asph啥机型_2020年最值得买大品牌手机盘点:华为vivo等五款机型入围
- 模糊c均值聚类_聚类算法及其数据可视化
- Windows C盘清理指北
- 中拉光伏产业合作蓬勃发展前景远大