使用Postman或requests结合chromedriver模拟Selenium操作浏览器

摘要:
Selenium是一款浏览器自动化测试框架,基于Webdriver协议。chromedriver是实现该标准的Chrome浏览器的一套驱动服务。Selenium实际上是对各种接口操作的封装seleniumwebdriver.remote.remote_connection中代码如下图:既然是HTTP接口,那么不使用Selenium,使用Postman或requests便能完成浏览器的操作。

Selenium是一款浏览器自动化测试框架,基于Webdriver协议。
从本质上来说:

  • webdriver是一套接口标准,使用标准的HTTP RESTful接口,使用JSON格式传递数据。
  • chromedriver是实现该标准的Chrome浏览器的一套驱动服务。
  • Selenium实际上是对各种接口操作的封装

seleniumwebdriver.remote.remote_connection中代码如下图:

使用Postman或requests结合chromedriver模拟Selenium操作浏览器第1张

既然是HTTP接口,那么不使用Selenium,使用Postman或requests便能完成浏览器的操作。

启动webdriver接口服务

如果你的chromedriver已经放置在环境变量路径中,直接在命令行输入chromedriver即可启动服务,输出信息如下:

$  chromedriver
Starting ChromeDriver 79.0.3945.36 (3582db32b33893869b8c1339e8f4d9ed1816f143-refs/branch-heads/3945@{#614}) on port 9515
Only local connections are allowed.
Please protect ports used by ChromeDriver and related test frameworks to prevent access by malicious code.

默认端口号为9515,即接口地址为:http://127.0.0.1:9515

使用Postman操作浏览器

Webdriver API参考

新建浏览器会话

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

POST http://127.0.0.1:9515/session
{
	"capabilities": {"browserName": "chrome"}
}

Postman中的请求设置如下图所示:
使用Postman或requests结合chromedriver模拟Selenium操作浏览器第2张

响应中会返回一个sessionId,如:06e32bb38efb7e182bd20dc5c975d3ae,这个sessionId就代表这个浏览器(会话)。

打开指定网址

接口及数据为:

POST http://127.0.0.1:9515/session/06e32bb38efb7e182bd20dc5c975d3ae/url
{"url": "https://www.baidu.com/"}

使用Postman或requests结合chromedriver模拟Selenium操作浏览器第3张

最大化窗口

接口及数据为:

POST http://127.0.0.1:9515/session/06e32bb38efb7e182bd20dc5c975d3ae/window/maximize
{}

使用Postman或requests结合chromedriver模拟Selenium操作浏览器第4张

元素定位

接口及数据为:

POST http://127.0.0.1:9515/session/06e32bb38efb7e182bd20dc5c975d3ae/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]"

使用Postman或requests结合chromedriver模拟Selenium操作浏览器第5张

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

元素操作

输入操作接口数据为:

POST http://127.0.0.1:9515/session/06e32bb38efb7e182bd20dc5c975d3ae/element/eef207e2-59c1-429d-9425-f1fd2da93c35/value
{"text": "大赢家"} 

注意session/后面的是sessionId, element/后面是元素id

使用Postman或requests结合chromedriver模拟Selenium操作浏览器第6张

执行后浏览器显示如下图所示:
使用Postman或requests结合chromedriver模拟Selenium操作浏览器第7张

删除会话

请求数据为:

DELETE http://127.0.0.1:9515/session/06e32bb38efb7e182bd20dc5c975d3ae
{}

使用Postman或requests结合chromedriver模拟Selenium操作浏览器第8张

使用requests自动操作浏览器

  1. 手动启动chromedriver
  2. 编写请求脚本,如下。
import requests

# 新建会话
res_dict = requests.post('http://127.0.0.1:9515/session',
                         json={"capabilities": {"browserName": "chrome"}}).json()
sessionId = res_dict.get('value').get('sessionId')

# 打开百度
requests.post(f'http://127.0.0.1:9515/session/{sessionId}/url',
              json={"url": "https://www.baidu.com/"})

# 最大化窗口
requests.post(f'http://127.0.0.1:9515/session/{sessionId}/window/maximize',
              json={})

# 定位搜索框
res_dict = requests.post(f'http://127.0.0.1:9515/session/{sessionId}/element',
                         json={"using": "css selector", "value": "#kw"}).json()
elementId = list(res_dict.get('value').values())[0]

# 输入文本
requests.post(f'http://127.0.0.1:9515/session/{sessionId}/element/{elementId}/value',
              json={"text": "大赢家"})

# 退出浏览器
requests.delete(f'http://127.0.0.1:9515/session/{sessionId}',
                json={})

免责声明:文章转载自《使用Postman或requests结合chromedriver模拟Selenium操作浏览器》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇Office 2016 for Mac 64位16.14.1(180613)安装包&激活Linux/Android——input_handler之evdev (四) 【转】下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

Android平台下的JNI开发

JNI是Java Native Interface的缩写,通过JNI可以方便我们在Android平台上进行C/C++编程。要用JNI首先必须安装Android的NDK,配置好NDK环境之后就可以在Eclipse下进行C/C++开发了。 其实JNI的原理很容易理解,其本质就是在Java层定义一个接口,同时在C层用C/C++代码实现该接口的功能并编译成动态链接...

selenium的关于选择框的定位

# coding:utf-8from selenium import webdriverfrom selenium.webdriver.common.action_chains import ActionChainsfrom selenium.webdriver.support.select import Selectimport timedriver...

MyX5TbsPlusDemo【体验腾讯浏览服务Android SDK (TbsPlus 版)】

版权声明:本文为HaiyuKing原创文章,转载请注明出处! 前言 按照官网上的说明:只需接入aar文件和调用一个接口即可完成TBS接入,我们会通过全屏Activity展示TBS WebView,适用于快速接入TBS且常规使用WebView的开发者。 按照接入文档中的说明:tbsplus是在tbs sdk 完整版基础上提供的开发者一键接入的AAR包,开发者...

.说一下你了解的几种设计模式

一、设计模式的分类 总体来说设计模式分为三大类: 创建型模式,共五种: 工厂方法模式 抽象工厂模式 单例模式 建造者模式 原型模式。 结构型模式,共七种: 适配器模式 装饰器模式 代理模式 外观模式 桥接模式 组合模式 享元模式。 行为型模式,共十一种: 策略模式 模板方法模式 观察者模式 迭代子模式 责任链模式 命令模式 备忘录模式 状态模式...

VLAN实验(2)Trunk接口

1.选择1台S5700、2台S3700和4台pc机,并根据实验编址完成此拓扑图。       2.启动设备,检查设备的连通性: 由于现在我们还没有划分VLAN,这5台PC,还在同一个VLAN中,现在我们启动所有的设备,这是所有的主机应该是可以ping通的   mengyu-PC1可以与其他3台PCping通        3.对交换机mengyu-S1...

使用 Metrics.net + influxdb + grafana 搭建项目自动化监控和预警方案

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。本文链接:https://blog.csdn.net/qq_25042791/article/details/86673581这次分享使用Metrics.net + influxdb + grafana 构建项目自动化监控和预警方案。通过执行耗时,定位哪...