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 然后,你 ...
随机推荐
- win10 优化
禁用服务中的某些不用的服务 例如 SysMain 服务 win+R键开启运行快捷方式,输入services.msc: 找到SysMain这个服务: 选择这个服务后,右键属性: 点击停止:启动类型选择禁 ...
- Oracle:ORA-00911: invalid character解决办法
问题记录:用jmeter执行sql语句,报错:ORA-00911: invalid character. 解决方法:sql语句末尾";"导致,去掉即可解决. 过程记录: 使用jme ...
- WinDBG详解进程初始化dll是如何加载的
一:背景 1.讲故事 有朋友咨询个问题,他每次在调试 WinDbg 的时候,进程初始化断点之前都会有一些 dll 加载到进程中,比如下面这样: Microsoft (R) Windows Debugg ...
- Arch Linux 的安装
Arch Linux 的安装 作者:Grey 原文地址: 博客园:Arch Linux 的安装 CSDN:Arch Linux 的安装 版本 Arch Linux:2022.07.01 VMware ...
- ssh明文密码小工具:sshpass
Xshell 远程时可以用如下方式进行明文密码免交互登陆: ssh 用户:密码@ip 可换到linux时,就不行了,在某些不适合使用公钥免密的情况下,到底该怎样免交互登陆? 于是我找到了sshpass ...
- 第2-4-6章 springboot整合规则引擎Drools-业务规则管理系统-组件化-中台
目录 7. Spring整合Drools 7.1 Spring简单整合Drools 7.1.1 以上代码均在drools_spring项目中 7.2 Spring整合Drools+web 7.2 以上 ...
- 4.11:Storm之WordCount
〇.概述 1.拓扑结构 2.目标 使用storm进行计数实验. 一.启动服务 在网页中输入:http://localhost:8081可以查看storm的相关信息. 二.kafka操作 终端中输入 ...
- 【SQL基础】基础查询:所有列、指定列、去重、限制行数、改名
〇.建表数据 drop table if exists user_profile; CREATE TABLE `user_profile` ( `id` int NOT NULL, `device_i ...
- 【消息队列面试】15-17:高性能和高吞吐、pull和push、各种MQ的区别
十五.kafka高性能.高吞吐的原因 1.应用 日志收集(高频率.数据量大) 2.如何保证 (1)磁盘的顺序读写-pagecache关联 rabbitmq基于内存读写,而kafka基于磁盘读写,但却拥 ...
- 深刻理解JAVA并发中的有序性问题和解决之道
欢迎关注专栏[JAVA并发] 更多技术干活尽在个人公众号--JAVA旭阳 问题 Java并发情况下总是会遇到各种意向不到的问题,比如下面的代码: int num = 0; boolean ready ...