使用ChromeDevTools协议编写自己的ChromeDriver
使⽤ChromeDevTools协议编写⾃⼰的ChromeDriver
ChromeDevTools协议简称CDP,它允许对Chromium,Chrome和其他基于Blink的浏览器进⾏检测,探测,调试和配置。许多现有项⽬⽬前使⽤该协议。 Chrome的开发者⼯具就是使⽤此协议,该团队也负责维护其API。Chrome浏览器可以远程调试的⽅式启动, 实际上在浏览器内部启动了⼀个采⽤DevTools的服务器, 任何符合该协议的websoket通讯都可以被Chrome响应,这样你可以向Chrome发送命令, 执⾏操作, 实现⼀些⾃动化浏览器的操作。⼤名⿍⿍的ChromeDriver就是通过 DevTools Protocol实现与chrome浏览器进⾏交互的。
CDP官⽅⽂档如下:
协议基础
当使⽤--remote-debugging-port= 0参数启动Chromium/Chrome时,它启动Chrome DevTools协议服务器并将其WebSocket URL打印到STDERR。输出看起来像这样:DevTools listening on ws://127.0.0.1:36775/devtools/browser/a292f96c-7332-4ce8-82a9-
7411f3bd280a
客户端可以创建WebSocket以连接到该URL并开始发送CDP命令。 ChromeDevTools协议主要基于JSO
NRPC:每个命令都是⼀个带有id/⽅法和可选参数的JavaScript结构。我们可以⽤如下js代码,通过websocket协议完成与浏览器的交互
此脚本通过DevTools协议发送Targets.setDiscoverTargets命令。浏览器将⾸先为每个现有⽬标发出⼀
个Target.targetCreated事件,然后响应该命令:
connected!
Sending Target.setDiscoverTargets
{"method":"Target.targetCreated","params":{"targetInfo":{"targetId":"38555cfe-5ef3-44a5-a4e9-
024ee6ebde5f","type":"browser","title":"","url":"","attached":true}}}
{"method":"Target.targetCreated","params":{"targetInfo":
电脑不能关机怎么办
{"targetId":"52CA0FEA80FB0B98BCDB759E535B21E4","type":"page","title":"","url":"about:blank","attached":false,"browserContextI d":"339D5F1CCABEFE8545E15F3C2FA5F505"}}}
{"id":1,"result":{}}
模拟chromedriver实现⽅案
环境搭建
从上⾯的例⼦中通过websocket与chrome直接交互实现是⽐较复杂的,因此各种主流语⾔都提供了类库来简化该过程,详细信息请参考:
在这⾥我们使⽤python的pychrome 来实现与chrome的交互,也可以理解我们⾃⼰开发了⼀个chromedriver!
安装pychrome
pip install -U pychrome
适合合唱的励志歌曲
Selenium实现场景
实现场景:在百度输⼊框中搜索selenium。
我们先回顾⼀下Selenium的代码实现过程如下:
1.把放到系统环境变量中
2.编写py代码
import webdriver
from selenium import
import unittest
class UntitledTestCase(unittest.TestCase):
def setUp(self):
self.driver = webdriver.Chrome()
self.driver.implicitly_wait(30)
def test_untitled_test_case(self):
driver =self.driver
"www.baidu/")
<("www.baidu/"
"kw").clear()
driver.find_element_by_id("kw"
"kw").send_keys("selenium"
"selenium")
鲁肃怎么死的
driver.find_element_by_id("kw"
"su").click()
driver.find_element_by_id("su"
def tearDown(self):
self.driver.quit()
3.执⾏⾃动化脚本
Selenium的原理如下:
从上图可知,最后是通过chromedriver完成了和chrome浏览器的交互!
关于selenium的详细原理分析可以参考⽂章:
Selenium原理精讲
lol登陆错误cdp实现场景
接下来我们通过cdp直接跟chrome浏览器的交互,模拟chromedriver,代码如下:import pychrome
browser = pychrome.Browser(
"127.0.0.1:9222")
url="127.0.0.1:9222"
#打开⼀个新的浏览器tab tab = w_tab()
tab.start()
able()
#访问baidu
"www.baidu", _timeout=5)
tab.Page.navigate(url="www.baidu"
tab.wait(5)
#在搜索框中输⼊selenium
'ElementById("kw").value="selenium"')
tab.Runtime.evaluate(expression='ElementById("kw").value="selenium"'
tab.wait(1)
#点击‘百度⼀下’按钮
选购手机'ElementById("su").click()')
tab.Runtime.evaluate(expression='ElementById("su").click()'
tab.wait(5)
tab.stop()
browser.close_tab(tab)
执⾏代码前,必须设置chrome属性,如下图所⽰:
接下来启动chrome。
最后执⾏py脚本,⼤家可以看到:
最新钓鱼用具
浏览器⾃动打开新的tab页>在百度输⼊框中搜索selenium>关闭tab页这⼀过程!这也就是selenium操控浏览器的原理了!原创不易,如果⽂章帮到了你,欢迎点赞转发,让更多的朋友受益!

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。