selenium 原理应用 - 利用 requests 模拟 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 requests

s = requests.session()
response = s.get("http://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)中查找到的元素。

在 selenium 库看来,以上每一步操作都是一个 http 请求,也叫做命令(Command)。

chromedriver 在收到这个请求之后,再去驱动对 Chrome 浏览器执行对应的动作。

所以,在 selenium 库当中,存储了所有命令(Command)名称、命令对应的 http 请求类型、命令对应的请求 url。

首先,来看看 Command 的名称(选取几个大家熟知的操作):

  • 2
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值