这个框架是我在知乎「Python有哪些常见的、好用的爬虫框架?」的高赞答案中看到的,试着用了一下,还挺好玩。

下面的内容主要来自Requestsium的GitHub上的介绍:https://github.com/tryolabs/requestium,少量是我自己的测试代码。

定位

Requestium是集RequestsSelenium于一体的WEB自动化工具。Requestium可以看作是在Requests为主体的基础上增加了Selenium的部分功能,如果你需要一个以Selenium为主体,增加部分Requests功能的Python库,可以去看一下 另一个叫做Selenium-Requests的库。

Requestium最主要的特性是能够在保持当前Web会话的同时,允许在Requests的Session和Selenium的Webdriver之间切换。

安装方法

pip install requestium

使用方法

对于能够熟练使用RequestsSelenium的人来说,学习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只支持PhantomJSChrome,鉴于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。

如果使用的是Seleniumfind_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相关推荐

  1. 知乎cookies的介绍_使用cookie登陆知乎

    只是想说明一个问题,Cookie可以维持登录状态,有些网页当中,访问之后的cookie里面带有登陆账号,和登陆密码,这样可以使用cookie直接访问网页,如知乎,首先登录知乎,将Headers中的Co ...

  2. 知乎cookies的介绍_知乎更新隐私政策:不点同意可选“仅浏览”,相关数据一月内删除...

    近年来,不时出现的大型互联网公司数据外泄丑闻,让人们对企业是否有能力保护自己的隐私产生了忧虑.为了赢得消费者的信任,隐私保护在当下已然成为一家公司的核心竞争力. 不久前,苹果上线隐私数据管理网站,以便 ...

  3. 知乎cookies的介绍_Cookie简介

    客户端和服务器端进行交互,要利用http协议,但是http协议本身是没有状态的,没有记忆功能,比如连接一次,你需要录入某个账号密码,浏览器关闭这次会话就结束了,但是我们经常用到一个功能就是记住密码那个 ...

  4. 0.爬虫介绍及requests库的使用

    1. 互联网知识介绍 互联网: 是由网络设备(网线, 路由器, 交换机, 防火墙...)和一台台计算机链接而成. 互联网建立的目的: 数据的共享/传递. 俗称的'上网': 由用户端计算机发送请求给目标 ...

  5. 网络爬虫requests+selenium总结

    github项目:https://github.com/lei940324/toy/blob/master/笔记/网络爬虫.md 网络爬虫 selenium 常用命令总结 导入所需要的模块 from ...

  6. 中国土地市场网信息爬取--requests+Selenium多线程爬取

    这次爬取的网站是中国土地市场信息网站https://www.landchina.com/default.aspx?tabid=263 先进行观察分析这个.发现这个网站以下有几个特点: 1.网站响应速度 ...

  7. (详细总结)python爬取 163收件箱邮件内容,收件箱列表的几种方法(urllib, requests, selenium)

    需求:最近有一个需求,需要将163邮箱收件箱里面的所有邮件的内容全部copy下来,整理到一个word里面,不多也就28页的邮件(不要问我为什么有这需求,不告诉你),自己手动去ctrl+ cv 的话,估 ...

  8. Python+PyQt5+Requests+Selenium写一个在线音乐播放器

    文章目录 写在前面的话 一.明确功能目标 二.UI设计 1.选择主界面 三.功能的实现 1.获取热榜. 2.随机获取四首热榜歌曲并获得封面. 3.初始化界面. 4.解析歌单. 5.播放/下载. 6.进 ...

  9. python requests cookies请求_python的requests库怎么发送带cookies的请求

    背景: 在用robot做接口自动化时,有一个查询接口需要用到登录后返回的token等信息作为cookies作为参数一起请求(token是在返回体中,并不在cookies中), 刚好create ses ...

  10. python 爬虫 简单爬虫教程(requests + selenium )

    最近改了实验室之前的爬虫,感觉有些生疏了,故此记录一下, 我将会通过抓取网站 https://nonfungible.com/ 来进行讲解. 目录 requests + Chrome 浏览器 使用Ch ...

最新文章

  1. java学习笔记:使用dom4j解析xml
  2. Cannot add or update a child row:
  3. git生成SSH-Key
  4. POJ 2773 欧几里得
  5. RocketMQ集成SpringBoot
  6. go环境搭建_学习的golang第一步,搭建我们运行的环境,go! go! go
  7. leetcode141 环形链表
  8. Web Service——CXF+Spring 整合
  9. java当前目录指什么_是什么决定了Tomcat Java进程的当前工作目录?
  10. 基于JAVA+SpringMVC+Mybatis+MYSQL的网上商城
  11. jieba库词频统计_运用jieba库进行词频统计
  12. LeetCode:螺旋矩阵【54】
  13. 视频采集以及播放的流程
  14. IOS中设置圆角图片
  15. C#调用GDAL算法进度信息传递
  16. 19【14】DIEN:深度兴趣演化⽹络
  17. 如何在iPhone、iPad和Mac上查看照片的EXIF数据?
  18. 利用diamond进行dbcan数据库建库并进行CAZyme注释(2022.8)
  19. 破解软件下载网站100个
  20. navicat运行db文件_在 Navicat for MongoDB 使用文档

热门文章

  1. python中append和insert_python append、extend与insert的区别
  2. python读conf配置文件完成登录_python conf配置文件
  3. layui框架简单解读,为什么要使用layui框架,layui框架的好处,后端程序员快速学习掌握layui框架技术型文档博文,layui学习笔记,快速掌握前端技术框架
  4. mysql如何只查询表中的前几条数据?多表查询前提了解
  5. python实现isprime函数、参数为整数、要有异常处理_Python期末复习题1
  6. 计算机机房维护与管理,计算机机房的管理与维护.doc
  7. 华为手机asph啥机型_2020年最值得买大品牌手机盘点:华为vivo等五款机型入围
  8. 模糊c均值聚类_聚类算法及其数据可视化
  9. Windows C盘清理指北
  10. 中拉光伏产业合作蓬勃发展前景远大