前言

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

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

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

需要解决的问题

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的名称(选取几个大家熟知的操作):

访问网站命令(GET)对应的请求类型和请求url为:

从上图可以看出,GET命令是post请求,请求地址只有一部分。

url中有3个问题:

1)请求的url并不完整。

url中,缺失中base地址。base地址为,chromedriver的ip+端口号。因为,命令是发给chromedriver去执行的。

2)url当中的$sessionId是什么?

在selenium当中,每开启一次与chromedriver的会话,都会生成一个会话ID。sessionId就是这个会话ID。在很多的命令请求当中,在请求地址中,通过sessionId都绑定了当前的会话。

换句话说,我们要用requests与chromedriver进行通信,那么我们首先,得生成会话ID,并得到这个ID值,才能够进一步的去访问网页,去发送更多的浏览器操作命令。

3)sessionId从何而来?如何获取?

在selenium当中,通过NEW_SESSION请求来开启会话,chromedriver在收到请求后,在响应数据中,返回本次会话的sessionId

接下来,以百度为例子,使用Jmeter来完成浏览器的操作

1、启动webdriver接口服务
点击运行chromedriver.exe文件(注意:chromedriver需与当前浏览器的版本一致,不一致可自行百度下载与浏览器一致的版本),打开后,默认端口号为9515,请求地址:http://127.0.0.1:9515

2、新建浏览器会话
Webdriver协议中一般使用POST请求, 数据使用JSON格式发送,即使不需要参数也要传递{}的JSON数据。
新建会话的接口及数据如下,新建会话时同capabilities指定要启动浏览器的选项。

POST http://127.0.0.1:9515/session
{
“capabilities”: {“browserName”: “chrome”}
}
Jmeter中的请求设置如下图所示:

响应中会返回一个sessionId,如:8ed0492f296082d2e2569cf7f0e637d2,这个sessionId就代表这个浏览器(会话),将其提取出来,以备后续接口使用

3、打开指定网址
接口及数据为:
POST http://127.0.0.1:9515/session/8ed0492f296082d2e2569cf7f0e637d2/url
{“url”: “https://www.baidu.com/”}

Jmeter中请求如下:

4、元素定位-输入框
接口及数据为:

POST http://127.0.0.1:9515/session/8ed0492f296082d2e2569cf7f0e637d2/element
{“using”: “css selector”, “value”: “#kw”}
这里的using支持以下5种:

“css selector”
“tag name”
“xpath”
“link text”
“partial link text”
Selenium中的find_element_by_id(), find_element_by_name()和find_element_by_class_name()实际上用的是css selector。

id=“kw”:相当于 css selector “#kw”
class_name=“card”:相当于 css selector “.card”
name=“info”:相当于 css selector “[name=info]”

执行后响应中会返回元素id,如:eef207e2-59c1-429d-9425-f1fd2da93c35,代表这个元素

5、输入元素
输入操作接口数据为:

POST http://127.0.0.1:9515/session/8ed0492f296082d2e2569cf7f0e637d2/element/eef207e2-59c1-429d-9425-f1fd2da93c35/value
{“text”: “selenium”}
注意session/后面的是sessionId, element/后面是元素id

6、元素定位-百度按钮
和第4步元素定位一样,只是请求参数不同

7、点击百度按钮
点击百度按钮接口操作数据:

POST http://127.0.0.1:9515/session/8ed0492f296082d2e2569cf7f0e637d2/element/eef207e2-59c1-429d-9425-f1fd2da93c35/value
{}

8、关闭浏览器
关闭浏览器接口操作数据:

DELETE http://127.0.0.1:9515/session/8ed0492f296082d2e2569cf7f0e637d2
{}
注意,这个是delete请求,删除会话,相当于关闭浏览器

到此,Jmeter模拟selenium操作浏览器的简单演示就结束了

Jmeter模拟selenium操作浏览器相关推荐

  1. chrome frame节点 取_爬虫3-下(利用Selenium + Chrome Driver模拟用户操作浏览器)

    一.前言 前面利用request的方法爬取页面数据的操作,今天用另外一种方法:利用Selenium + Chrome Driver模拟用户操作浏览器,来爬取数据. 在此之前需要做一些准备工作:安装se ...

  2. 零基础:Python之Selenium操作浏览器模拟登陆QQ邮箱

    零基础:Python之Selenium操作浏览器模拟登陆QQ邮箱 一. Selenium简介 二. 环境配置 2.1 Python运行环境搭建 2.2 Selenium相关安装与配置 2.2.1 Se ...

  3. java操作浏览器_java selenium 操作浏览器实例

    导读热词 本篇文章介绍selenium 操作浏览器 阅读目录 浏览器最大化 前进,后退, 刷新 截图操作 模拟鼠标操作 杀掉Windows浏览器进程 浏览器最大化 前进,后退, 刷新 public s ...

  4. [Python爬虫]使用Selenium操作浏览器订购火车票

    这个专题主要说的是Python在爬虫方面的应用,包括爬取和处理部分 [Python爬虫]使用Python爬取动态网页-腾讯动漫(Selenium) [Python爬虫]使用Python爬取静态网页-斗 ...

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

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

  6. selenium操作浏览器的前进和后退

    前进关键字:driver.forward() 后退关键字:driver.back() 测试对象:1.https://www.baidu.com/ 2.https://www.sogou.com/ 实例 ...

  7. Selenium基础 — Selenium操作浏览器窗口滚动条

    1.为什么操作滚动条 在HTML页面中,由于前端技术框架的原因,页面中的一些元素为动态显示,元素根据滚动条的下拉而被加载. 例如:页面注册同意条款,需要滚动条到最底层,才能点击同意. 2.Seleni ...

  8. selenium操作浏览器cookie方法

    /**      * 操作浏览器的cookie      */          @Test     public void testCookie()throws Exception{        ...

  9. [Selenium] 操作浏览器 Cookies

    WebDriver 提供了一系列 Cookies 的操作来获取.填写.删除 Cookies 的方法,节省了多次在登陆页面的查找元素并填写登录信息的时间. 1)获取 Cookies ,并保存到文件中以备 ...

最新文章

  1. 【ACM】熊孩子的乐趣
  2. 人工智能及其应用(第5版).蔡自兴-1-5章课后习题。【部分无答案】
  3. 【项目实践】从零开始学习Deep SORT+YOLO V3进行多目标跟踪(附注释项目代码)...
  4. 使用C++实现Socket编程图片打包传输(修改)
  5. zTree新增的根结点再新增子节点reAsyncChildNodes不生效解决方案
  6. tensorflow随笔-二分法求解一元方程
  7. 使用eclipse开发javaweb登录功能
  8. 安装php遇到的问题
  9. 为DataList和GridView内容项添加序号
  10. 大学计算机应用基础教程第三章,计算机应用基础教程 李健苹 计算机应用基础教程 第3章...
  11. 插件占坑,四大组件动态注册前奏(三) 系统BroadCast的注册发送流程
  12. laravel php artisan migrate 数据迁移时出现的[HY000][1045]错误
  13. 问题: 在Multisim中的 Tools»Show Breadboard,我找不到面包板视图的选项。
  14. MINIST数据集读取
  15. 电脑键盘部分按键失灵_华硕笔记本键盘有部分按键失灵 - 卡饭网
  16. 模N计数器-计数+使能信号
  17. 有哪些超好用的邮件群发软件?这款做邮件推广的一定要试试!
  18. python安装os模块_python安装os
  19. java如何表格一样对齐_如何水平对齐表格? (How can I horizontally align a form?)
  20. Android Espresso(一)——环境建立

热门文章

  1. http抓包工具及协议登录技巧讲解
  2. 11-陕西小伙伴网络科技有限公司-info
  3. Simplescalar安装流程
  4. FLUKE 438-II电能质量分析仪有强大的电机分析能力
  5. Tech Talk 活动预告 | 云原生DevOps的Kubernetes技巧
  6. BindingException: Invalid bound statement (not found)
  7. 各种多媒体软件功能总结
  8. 墨尔本大学计算机专业的课程,墨尔本大学计算机课程怎么样
  9. 第六章 面向对象编程基础总结
  10. Windows如何清除已保存的FTP密码