使用ChromeDevTools协议编写自己的ChromeDriver
ninehua 2024-12-06 18:07 3 浏览
ChromeDevTools协议简称CDP,它允许对Chromium,Chrome和其他基于Blink的浏览器进行检测,探测,调试和配置。许多现有项目目前使用该协议。 Chrome的开发者工具就是使用此协议,该团队也负责维护其API。Chrome浏览器可以远程调试的方式启动, 实际上在浏览器内部启动了一个采用DevTools的服务器, 任何符合该协议的websoket通讯都可以被Chrome响应,这样你可以向Chrome发送命令, 执行操作, 实现一些自动化浏览器的操作。大名鼎鼎的ChromeDriver就是通过 DevTools Protocol实现与chrome浏览器进行交互的。
CDP官方文档如下:
https://chromedevtools.github.io/devtools-protocol/
协议基础
当使用--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协议主要基于JSONRPC:每个命令都是一个带有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,"browserContextId":"339D5F1CCABEFE8545E15F3C2FA5F505"}}}
{"id":1,"result":{}}
模拟chromedriver实现方案
- 环境搭建
从上面的例子中通过websocket与chrome直接交互实现是比较复杂的,因此各种主流语言都提供了类库来简化该过程,详细信息请参考:
https://github.com/ChromeDevTools/awesome-chrome-devtools#chrome-devtools-protocol
在这里我们使用python的pychrome 来实现与chrome的交互,也可以理解我们自己开发了一个chromedriver!
Pychrome详情请参考:https://github.com/fate0/pychrome
安装pychrome
pip install -U pychrome
- Selenium实现场景
实现场景:在百度输入框中搜索selenium。
我们先回顾一下Selenium的代码实现过程如下:
1.把chromedriver.exe放到系统环境变量中
2.编写py代码
from selenium import webdriver
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
driver.get("https://www.baidu.com/")
driver.find_element_by_id("kw").clear()
driver.find_element_by_id("kw").send_keys("selenium")
driver.find_element_by_id("su").click()
def tearDown(self):
self.driver.quit()
3.执行自动化脚本
Selenium的原理如下:
从上图可知,selenium最后是通过chromedriver完成了和chrome浏览器的交互!
关于selenium的详细原理分析可以参考文章:
- cdp实现场景
接下来我们通过cdp直接跟chrome浏览器的交互,模拟chromedriver,代码如下:
import pychrome
browser = pychrome.Browser(
url="http://127.0.0.1:9222")
#打开一个新的浏览器tabtab = browser.new_tab()
tab.start()
tab.Network.enable()
#访问baidu
tab.Page.navigate(url="https://www.baidu.com", _timeout=5)
tab.wait(5)
#在搜索框中输入selenium
tab.Runtime.evaluate(expression='document.getElementById("kw").value="selenium"')
tab.wait(1)
#点击‘百度一下’按钮
tab.Runtime.evaluate(expression='document.getElementById("su").click()')
tab.wait(5)
tab.stop()
browser.close_tab(tab)
执行代码前,必须设置chrome属性,如下图所示:
接下来启动chrome。
最后执行py脚本,大家可以看到:
浏览器自动打开新的tab页>在百度输入框中搜索selenium>关闭tab页这一过程!这也就是selenium操控浏览器的原理了!原创不易,如果文章帮到了你,欢迎转发点赞,让更多的朋友受益!
相关推荐
- 64位Win7中7zip无法关联文件的问题
-
问题1:win7x64中安装了7zip,在解压文件右键打开无法关联文件。解决方法1:在开始菜单中打开7-zipFileManage-》工具-》选项-》7-zip勾选“添加7-zip到右键菜单...
- MacBook电脑一键完成7Z、zip、dmg文件压缩,超高效率
-
许多朋友想要压缩文件,但又找不到合适的软件工具,今天小编推荐一个,本人一直在使用Mac压缩软件——MyZip!1、强大的压缩功能,满足日常生活的各种需要!...
- Win电脑必装良心APP!8款高效办公软件推荐
-
1、浏览器:EdgeWindows自带浏览器,速度快,内存占用少,集成度高,可以跨平台同步,支持很多拓展程序来增加浏览器的使用体验。...
- 7-Zip 解压缩工具被曝安全漏洞,可执行远程代码
-
7-Zip工具介绍7-Zip是一款广泛使用的开源压缩工具,以其高压缩比、多格式支持和免费开源的特性闻名。用户遍布全球,常用于文件的压缩与解压缩操作。然而,近期曝出的一系列安全漏洞,使得这款软件的安...
- 「IT之家评测室」英特尔酷睿i9-9900KS首发评测
-
英特尔今天正式解禁了酷睿i9-9900KS处理器,作为英特尔第一款全核5.0GHz的处理器,i9-9900KS的出现让追求极致性能的玩家又有了新的选择。因为工艺问题,英特尔现阶段桌面处理器依旧停留在1...
- 这才是“全家桶”软件该有的样子,win10电脑必备实用软件推荐
-
最近因为网课的原因,和很多老师打交道,才发现很多人的电脑里,弹窗广告满天飞,尤其是家里有小孩的,露骨的广告是很令人烦恼。那么这些弹窗广告究竟是从哪里来的呢?小迷虫被很多人问过,于是小迷虫反问:你给电脑...
- 牛年新年coreelec新升级19.0 coreelec 9.27
-
2021牛年新年刚过,CoreELEC新的升级就来了。我的升级方法是自己创新的文件替换大法,此法快速高效,中文、遥控和液晶显示,及...
- 靠谱!龙芯3A6000处理器套装测评,体验远超预期
-
2023年11月28日,龙芯中科在北京国家会议中心举办了盛大的发布会,会上发布了一系列龙芯产品,其中就包括了采用完全自主研发LoongArch指令集和龙芯第四代微架构的龙芯3A6000处理器。同时,知...
- 使用Python进行压缩与解压缩 用python解压压缩包
-
在日常工作中,除了会涉及到使用Python处理文本文件,有时候还会涉及对压缩文件的处理。通常会涉及到的压缩文件格式有:...
- 游戏持平,生产力更佳,浅谈14700KF和7800X3D谁更值得入手
-
#秋日生活打卡季#写在前面...
- “普通”压缩包实则隐藏恶意木马,黑客利用“ZIP串联文件”攻击
-
IT之家11月12日消息,安全公司PerceptionPoint报道,有黑客正在利用一种被称为“ZIP串联文件”的复杂规避策略针对Windows用户发动攻击。IT之家获悉,所谓“Z...
- 剔除软件中的流氓植入 清除流氓软件的工具
-
虽然流氓软件早已成为过街老鼠人人喊打,但是出于推广的需要,现在仍然有很多软件在进行捆绑。一些不知名网站下载的软件,甚至可能捆绑了木马、病毒等恶意软件。为了不让这些流氓软件进驻我们的电脑,可以在安装之前...
- 7zip如何把1G文件压缩到200M?三种方法快速简单!
-
文件太大会带来很多麻烦,不仅会占据我们有限的存储空间,而且传输给其他朋友或同事时也会因为太大而无法传输,或者传输太慢太耗时,实在让人烦躁......那么如何把1G文件压缩到200M呢?下面介绍三种有效...
- 7zip怎么压缩文件到最小?这样操作非常简单!
-
7-zip是一款免费开源的压缩软件,当我们需要打包压缩文件的时候,会用到它处理文件,那具体该怎么使用7-zip压缩文件到最小呢?下面简单有效的几个步骤。...