提问人:Jcyrss 提问时间:1/25/2020 最后编辑:undetected SeleniumJcyrss 更新时间:3/21/2021 访问量:21188
chrome 驱动程序如何与 Chrome 浏览器交互?
How does chrome driver interact with Chrome browser?
问:
它说
ChromeDriver 是实现 W3C WebDriver 标准的独立服务器
看起来 W3C WebDriver 标准只定义了自动化程序和 Chromedriver 之间的接口。Chromedriver 充当 HTTP 服务器,从自动化程序获取命令。
但是 ChromeDriver 如何与 Chrome 通信?
还是通过HTTP协议?
如果是,我们从哪里可以获得有关详细信息的文档?Chrome 内部的哪个组件负责处理来自 Chromedriver 的命令?它是内置于 chrome 还是只是 Chrome 的扩展?
答:
Selenium 的核心是 WebDriver,它是远程控制界面,可以对用户代理进行内省和控制。WebDriver 提供了一个平台和语言中立的线路协议,作为进程外程序远程指示 Web 浏览器行为的一种方式,因此指令集可以在许多浏览器中互换运行。
Selenium WebDriver 是指语言绑定和各个浏览器控制代码的实现,通常称为 WebDriver。WebDriver 是一个 API 和协议,它定义了一个与语言无关的接口,用于控制 Web 浏览器的行为。每个浏览器都由特定的 WebDriver 实现(称为驱动程序)提供支持。驱动程序是负责委派给浏览器的组件,并处理与 Selenium 和浏览器之间的通信。
零件和零件
在最低要求下,WebDriver 通过驱动程序与浏览器通信,通信是双向的:
- WebDriver 通过驱动程序将命令传递给浏览器
- 通过相同的路由接收信息。
Chrome驱动程序
ChromeDriver 是实现 W3C WebDriver 标准的独立服务器。ChromeDriver 适用于 Android 版 Chrome 和桌面版 Chrome(Mac、Linux、Windows 和 ChromeOS)。驱动程序与浏览器在同一系统上运行。这可能是也可能不是测试本身执行的同一系统,并且是直接通信的示例。
远程 WebDriver
但是,与浏览器的通信也可以是通过Selenium Server或RemoteWebDriver进行远程通信。RemoteWebDriver 与驱动程序和浏览器在同一系统上运行。
硒网格
远程通信也可以使用 Selenium Server 或 Selenium Grid 进行,这两者又与主机系统上的驱动程序通信。
通过命令进行通信
WebDriver 协议被组织成命令。每个具有规范中定义的方法和模板的 HTTP 请求都代表一个命令,因此每个命令都会生成一个 HTTP 响应。为了响应命令,远程端将运行一系列称为远程端步骤的操作。它们提供远程端在接收特定命令时执行的一系列操作。
命令处理
远程端是 HTTP 服务器,通常通过 TCP 套接字读取来自客户端的请求并写入响应。在规范中,通信被建模为特定本地端和远程端之间的数据传输,远程端可以写入字节和读取字节。这种连接如何工作以及如何建立的确切细节是一个更大的话题,超出了这个问题的范围。建立连接后,远程端必须从连接中读取字节,直到可以从数据中构造完整的 HTTP 请求。如果无法构造完整的 HTTP 请求,则远程端必须关闭连接,返回状态代码为 500 的 HTTP 响应,或返回错误代码为 unknown error 的错误。
评论
为了便于查找,我将注释移到此处。
Chrome 驱动程序通过基于 websocket 的 Chrome DevTools 协议控制 Chrome 浏览器。本文提供了更多详细信息
评论