requests进行webdriver协议,模仿selenium
准备工作
你在做下面的练习之前应该具备
安装好chrome,并通过chrome://version确认其版本号
安装chromedriver并与你的chrome版本相匹配,下载路径如下
https://registry.npmmirror.com/binary.html?path=chromedriver/
你应该有一个python+ide(如pycharm)的环境,反正下面的示例是用这些来完成的。
下好requests库,对语法不再阐述
关于chromedriver
本质上是个web server
在命令行启动chromedriver应该是如下提示
cmd>chromedriver.exe
Starting ChromeDriver 100.0.4896.20 (f9d71f93d32a6487809d6f35a9670c879fe97dfe-refs/branch-heads/4896@{#203}) on port 9515
Only local connections are allowed.
Please see https://chromedriver.chromium.org/security-considerations for suggestions on keeping ChromeDriver safe.
ChromeDriver was started successfully.
放在那里不要关闭哦~
关于webdriver
参阅:6.5的endpoint部分
https://w3c.github.io/webdriver/#endpoints
开始
我就不封装了,你有兴趣自行封装
不一样的,打开浏览器
| Method | URI Template | Command | 
|---|---|---|
| POST | /session | New Session | 
示例代码:以chrome为例
import requests
server_url = 'http://127.0.0.1:9515/session'
session_data = {
'desiredCapabilities':{
"caps":{"browserName":"chrome"} #此处可以变更浏览器类型,前提你启动了对应的chromedriver或者geckodriver等。
}
}
session_req = requests.post(url=server_url,json=session_data) #json传递
是不是相当于selenium的api
from selenium import webdriver
driver = webdriver.Chrome()
区别是?不需要安装selenium就可以通过api来调用了,当然会更麻烦,人家给你封装好了。
不一样的,输入网址
| Method | URI Template | Command | 
|---|---|---|
| POST | /session | New Session | 
| POST | /session/{session id}/url | Navigate To | 
示例代码
import requests
from time import sleep
server_url = 'http://127.0.0.1:9515/session' #这个url不能以/结尾
session_data = {
'desiredCapabilities':{
"caps":{"browserName":"chrome"}
}
}
session_req = requests.post(url=server_url,json=session_data) #此处不能是data
# 打开网址
session_id = session_req.json().get('sessionId') #首先要获取sessionId,是后面操作的根基
dest_url = 'http://121.41.14.39:8088/index.html#/' #比如你要打开这个网址
get_url_data = {'url':dest_url} #字典形式
requests.post(server_url+'/'+session_id+'/url',json=get_url_data) #注意url的格式,跟ep对比是不是类似于selenium中的driver.get()
不一样的,输入,点击
| Method | URI Template | Command | 
|---|---|---|
| POST | /session | New Session | 
| POST | /session/{session id}/url | Navigate To | 
| POST | /session/{session id}/element | Find Element | 
| POST | /session/{session id}/element/{element id}/click | Element Click | 
| POST | /session/{session id}/element/{element id}/value | Element Send Keys | 
示例代码
import requests
from time import sleep
#登录
# 1. 打开浏览器
server_url = 'http://127.0.0.1:9515/session' #这个url不能以/结尾
session_data = {
'desiredCapabilities':{
"caps":{"browserName":"chrome"}
}
}
session_req = requests.post(url=server_url,json=session_data) #此处不能是data
# 2. 输入网址
session_id = session_req.json().get('sessionId')
dest_url = 'http://106.14.1.150:8090/forum.php' #这是我在阿里云部署的一个服务器
get_url_data = {'url':dest_url}
requests.post(server_url+'/'+session_id+'/url',json=get_url_data) # 简单封装下
def get_eid(url,sid,method,method_value): #获取elementid
data = {'using':method,'value':method_value}
return requests.post(url+'/'+sid+'/element',json=data).json().get('value').get('ELEMENT')
def input_text(url,sid,eid,text): #在指定的元素上输入内容
data = {'value':[text]}
requests.post(url+'/'+sid+'/element/'+eid+'/value', json=data)
def click_element(url,sid,eid): #点击指定的元素
requests.post(url + '/' + sid + '/element/' + eid + '/click') # 3. 输入用户名
# 3.1 获取用户名元素的elementid,通过id方式,其值为ls_username
username_id = get_eid(server_url,session_id,'id','ls_username')
input_text(server_url,session_id,username_id,'ruru023')
sleep(2)
# 3.2 获取密码元素的elementid,通过id方式,其值为ls_password
password_id = get_eid(server_url,session_id,'id','ls_password')
input_text(server_url,session_id,password_id,'123456')
sleep(2)
# 3.3 获取登录按钮元素的elementid,通过css selector方式,其值为.pn.vm
login_button_id = get_eid(server_url,session_id,'css selector','.pn.vm')
click_element(server_url,session_id,login_button_id)
类似于seleniumapi中的
- webelement.send_keys()
 - webelement.click()
 - driver.find_element(By.ID,'ID_VALUE')
 
requests进行webdriver协议,模仿selenium的更多相关文章
- java-appium-527 WebDriver协议&针对控件的操作
		
1.WebDriver协议 https://www.w3.org/TR/webdriver/#list-of-endpoints 1.1查看当前所有的session情况 http://127.0.0. ...
 - webdriver介绍&与Selenium RC的比较
		
什么是webdriver? webdriver是一个web自动化测试框架,不同于selenium IDE只能运行在firefox上,webdriver能够在不同的浏览器上执行你的web测试用例.其支持 ...
 - nightwatchjs 基于nodejs&& webdriver 协议的自动化测试&&持续集成框架
		
nightwatchjs 是基于nodejs&& webdriver 协议的自动化测试&&持续集成框架 参考架构 参考资料 http://nightwatchjs.or ...
 - 百度贴吧自动回帖的两种方式,使用requests(urllib2)和selenium两种方式回帖
		
本文介绍,回复贴吧指定某楼层主的帖子的方法.在这里不介绍无限发主贴和无限回复主贴的方法,无限发主题帖会爆吧,引起别人的反感,并且很容易遭到吧主的封杀:无限回主题帖,会让整个帖子的每楼的回复充满了自己的 ...
 - Webdriver概述(selenium对应浏览器版本)
		
Webdriver (Selenium2)是一种用于Web应用程序的自动测试工具,它提供了一套友好的API,与Selenium 1(Selenium-RC)相比,Webdriver 的API更容易理解 ...
 - Requests方法 -- Http协议的短链接与长连接介绍
		
转载于简书: 作者:熊师傅链接:https://www.jianshu.com/p/3fc3646fad80 1.以前的误解 很久之前就听说过长连接的说法,而且还知道HTTP1.0协议不支持长连接,从 ...
 - 【转载】【selenium+Python WebDriver】之selenium的定位以及切换frame(iframe)
		
感谢CSDN:huilan_same大神 网页地址:http://blog.csdn.net/huilan_same/article/details/52200586
 - selenium源码分析-webdriver(二)
		
最近比较空闲就仔细看了一下Selenium的源码,因为主要是使用WebDriver所以重点关注了一下WebDriver的工作原理.在前一篇blog里已经解释过了WebDriver与之前Selenium ...
 - Selenium WebDriver 处理cookie
		
在使用webdriver测试中,很多地方都使用登陆,cookie能够实现不必再次输入用户名密码进行登陆. 首先了解一下Java Cookie类的一些方法. 在jsp中处理cookie数据的常用方法: ...
 - <译>Selenium Python Bindings 6 - WebDriver API
		
本章涉及Selenium WebDriver的所有接口. Recommended Import Style 推荐的导入风格如下: from selenium import webdriver 然后,你 ...
 
随机推荐
- Azure DevOps Server 设置项目管理用户,用户组
			
一,引言 Azure DevOps Server 搭建完成后,关于如何进行项目管理,项目成员管理等,我们接着上一篇文章,继续讲解 Azure DevOps Server 的用户,用户组.首先,我们需要 ...
 - tekla软件安装教程
			
Tekla2020 WIN10 64位安装步骤: 1.先使用"百度网盘客户端"下载Tekla2020_x64软件安装包到电脑磁盘,并鼠标右击进行解压缩,安装前先断开电脑网络,然后找 ...
 - DevOps 必备的 Kubernetes 安全清单
			
Kubernetes 是当今许多公司采用的容器编排平台,它的实施需要对其生态系统有一定的了解,以便部署一个准备好用于生产的集群.然而从原则上来说,Kubernetes 并不是一个安全的平台,因为它缺乏 ...
 - 华为云平台部署教程之CNA\VRM的安装
			
本教程仅含华为云平台搭建部署中CNA和VRM的安装,请按需求选择查看本文. 一.前期准备 1.硬件 服务器*4 交换机*3 网线 个人PC机 2.软件 PC机系统(win7/win10) KVM软件 ...
 - PHY驱动调试之 --- PHY控制器驱动(二)
			
1. 前言 内核版本:linux 4.9.225,以freescale为例. 2. 概述 PHY芯片为OSI的最底层-物理层(Physical Layer),通过MII/GMII/RMII/SGMII ...
 - 2022csp普及组真题:解密(decode)
			
2022csp普及组真题:解密(decode) 题目 [题目描述] 给定一个正整数 k,有 k 次询问,每次给定三个正整数 ni , ei , di,求两个正整数 pi , qi, 使 ni = pi ...
 - Devexpress控件pivotGridControl显示字段面板
			
可在窗口加载的时候使用函数 pivotGridControl1.ShowCustomization(); 大家如果有问题可以 Console.WriteLine("加群"+&quo ...
 - java基础知识-lambda表达式
			
一.什么是lambda? 在Java中,我们可以将一个值赋值给一个Java变量. int aValue = 129; String aString = "hello world"; ...
 - GitHub上的一个笔记相关小项目
			
就是一个笔记屑小项目, C++编写,有想一起开发的私信 AlgorithWeaver/V-note (github.com) 项目名V-note QVQ
 - 用友开发者中心全新升级,YonBuilder移动开发入门指南
			
听说用友新上线了全新的开发者中心,有YonBuilder应用开发,集成开发.数据开发.智能与自动化.DevOps 等板块,本人作为用户老客户,对其中的移动开发比较感兴趣,本文重点讲解其中的移动开发平台 ...