1、前言
Requests 是 Python 的第三方库,主要用于发送 http 请求,常用于接口自动化测试等。
Selenium 是一个用于 Web 应用程序的自动化测试工具。Selenium 测试直接运行在浏览器中,就像真正的用户在操作一样。
本篇介绍一款将 Requests 和 Selenium 结合在一起的自动化测试工具 - Requestium
2、简介
Requestium 是一个 Python 库,它将 Requests、Selenium 和 Parsel 的功能合并为一个用于自动化 web 操作的集成工具。
该库是为编写 web 自动化脚本而创建的,这些脚本主要使用请求编写,但能够在维护会话的同时,无缝切换到网站中 JavaScript 密集部分的 Selenium。
Requestium 为 Requests 和 Selenium 添加了独立的改进,并且每一个新功能都经过了延迟评估,因此即使编写只使用 Requests 或 Selenium 的脚本,它也很有用。
特点:
- 在维护当前 web 会话的同时,启用请求会话和 Selenium web 驱动程序之间的切换。
- 将 Parsel 的解析器集成到库中,使 xpath、css 和 regex 的编写更加简洁。
- 改进了 Selenium 对动态加载元素的处理。
- 使 Selenium 中的 cookie 处理更加灵活。
- 使 Selenium 中的点击元素更加可靠。
- 本机支持 Chromedriver,并添加自定义网络驱动程序。
安装:
如果你使用 Requestium 的 Selenium 部分,例如 Chromedriver,那么你应该下载 Selenium Web 驱动程序。
3、快速上手
首先,像处理请求一样创建一个会话,如果使用 web 驱动程序,可以选择添加参数。
由于无头模式很常见,因此有一个快捷方式可以指定 headless=True。
你也可以在 Requestium 之外创建一个 Selenium 网络驱动程序,并使用它:
你不需要解析响应,当调用 xpath,css 或 re 时,它会自动完成。
与 Python 的标准 re 模块相比,正则表达式需要更少的代码。
你可以切换到使用 Selenium Webdriver 来运行任何 js 代码。
最后,你可以切换回使用 Requests。
等待元素
ensure_element_by_ 方法等待元素在浏览器中加载,并在加载后立即返回。它以 Selenium的 find_element_by_ 方法命名(如果找不到元素,它们会立即引发异常)。
Requestium 可以等待一个元素处于以下任何状态:
- 存在(默认)
- 可点击
- 看得见的
- 不可见(可用于等待加载... GIF 消失等)
这些方法对于单页面 Web 应用程序非常有用,其中站点动态地更改其元素。我们通常最终完全用 ensure_element_by_ 调用替换我们的 find_element_by_ 调用,因为它们更灵活。使用这些方法获取的元素具有新的 ensure_click 方法,这使得点击不太容易失败。这有助于解决 Selenium 点击的许多问题。
添加 Cookie
ensure_add_cookie 方法使得添加 Cookie 更加稳健。Selenium 需要浏览器在能够添加 Cookie 之前处于 Cookie 的域中,此方法为此提供了几种解决方法。如果浏览器不在 Cookie 域中,它会先获取域然后再添加 Cookie。它还允许你在添加 Cookie 之前覆盖域,并避免执行此 GET。域可以被覆盖为 ’’,这将把 Cookie 的域设置为驱动程序当前所在的任何域。如果无法添加 cookie,它会尝试使用限制性较小的域(例如:home.site.com -> site.com)进行添加,然后在失败之前。