百度360必应搜狗淘宝本站头条
当前位置:网站首页 > 软件资讯 > 正文

使用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的详细原理分析可以参考文章:

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、强大的压缩功能,满足日常生活的各种需要!...

7-Zip 遭抵制?呼吁者定下“三宗罪”:伪开源、不安全、作者来自俄罗斯

...

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压缩文件到最小呢?下面简单有效的几个步骤。...