selenium 原理应用 - 利用 requests 模拟 selenium 驱动浏览器

发布于 更新于
本文目录
  1. 前言
  2. requests 库
  3. 需要解决的问题
  4. selenium - JSON wire protocol - 获取请求 url 和类型

技术文章

前言selenium 是一个 Web 自动化测试的开源框架,它支持多语言:python/java/c#…前面也有一篇文章说明了,selenium+ 浏览器的环境搭建。selenium 支持多语言,是因为 selenium 与浏览器驱动之间是...

前言

selenium 是一个 Web 自动化测试的开源框架,它支持多语言:python/java/c#…

前面也有一篇文章说明了,selenium+ 浏览器的环境搭建。

selenium 支持多语言,是因为 selenium 与浏览器驱动之间是通过 http 协议进行通信的。只关心通信的数据是否能够正确解读 ,并不关心这个数据是从哪个客户端来。无论来自 python\java,还是 jmeter,postman 都没有问题。

本篇文章中,以 requests 做为客户端,跳过 selenium,直接与谷歌浏览器驱动(chromedriver)进行 http 通信,驱动 Chrome 浏览器去执行命令。



requests 库

先解释一下 requests 库:一个 python 的第三方库,是目前最好用的 http 请求库。

直接封装了 get 请求、post 请求。

只需要提供 请求 url、请求方法、请求内容即可。

以下为 request 库使用的简单示例(request 的详细使用可参看其它博主其它的博文):

import requestss = requests.session()response = s.get("https://www.baidu.com")  # 发起get请求print(response.text)  # 获取响应结果的  响应数据res = response.json()  # 将  响应数据  转换成python数据对象。


如果我要利用 requests 库,去向 chromedriver 发送请求。那么我必须得了解请求的类型、请求的数据、请求的内容是什么。

基于此,我们需要了解在 selenium 库当中,会有哪些请求?



需要解决的问题

  1. selenium 有哪些请求?

  2. 每一个请求的请求 url、请求类型如何获取?

  3. 每一个请求的请求数据又如何获取?



selenium - JSON wire protocol - 获取请求 url 和类型

要想解决以上 3 个问题,我们需要了解 selenium 的部分原理。

在 selenium 与驱动进行 http 通信的协议全称叫做:JSON wire protocol.

我们在使用 selenium 库驱动浏览器的时候,我们的操作有一部分大概是以下这样的:

  1. 打开 Chrome 浏览器;

  2. 访问某一个网址;

  3. 查找该网址中的某一个元素;

  4. 操作 3)中查找到的元素。





继续阅读