【问题标题】:How does chrome driver interact with Chrome browser?chrome驱动如何与Chrome浏览器交互?
【发布时间】:2020-05-11 13:27:23
【问题描述】:

上面写着

ChromeDriver 是一个独立的服务器,它实现了W3C WebDriver standard

看起来 W3C WebDriver 标准只定义了自动化程序和 Chromedriver 之间的接口。 Chromedriver 充当 HTTP 服务器,从自动化程序中获取命令。

但是 ChromeDriver 是如何与 Chrome 通信的呢?

仍然通过 HTTP 协议?

如果是,我们从哪里可以获得有关详细信息的文档? Chrome 内部的哪个组件负责处理来自 Chromedriver 的命令?它是内置在 chrome 中还是只是 Chrome 的扩展?

【问题讨论】:

    标签: selenium google-chrome selenium-webdriver webdriver selenium-chromedriver


    【解决方案1】:

    Selenium 的核心是WebDriver,这是一个远程控制接口,可以对用户代理进行自省和控制。 WebDriver 提供了一个平台和语言中立的有线协议,作为进程外程序远程指示 Web 浏览器行为的一种方式,因此指令集可以在许多浏览器中互换运行。


    Selenium WebDriver 指的是语言绑定和单个浏览器控制代码的实现,通常称为 WebDriver。 WebDriver 是一个 API 和协议,它定义了一个语言中立的接口,用于控制 Web 浏览器的行为。每个浏览器都由特定的 WebDriver 实现支持,称为驱动程序。驱动程序是负责委派给浏览器的组件,并处理与 Selenium 和浏览器之间的通信。


    零件和碎片

    在最低要求下,WebDriver 通过驱动程序与浏览器通信,通信有两种方式:

    • WebDriver 通过驱动程序将命令传递给浏览器
    • 通过相同的路径接收信息。

    Chrome 驱动程序

    ChromeDriver 是实现W3C WebDriver standard 的独立服务器。 ChromeDriver 适用于 Android 版 Chrome 和桌面版 Chrome(Mac、Linux、Windows 和 ChromeOS)。驱动程序与浏览器在同一系统上运行。这可能是也可能不是测试本身正在执行的同一系统,并且是直接通信的示例。


    远程网络驱动程序

    但是,与浏览器的通信也可能是通过 Selenium Server 或 RemoteWebDriver 进行的远程通信。 RemoteWebDriver 与驱动程序和浏览器在同一系统上运行。


    硒网格

    也可以使用 Selenium Server 或 Selenium Grid 进行远程通信,这两者又会与主机系统上的驱动程序通信。


    通过命令进行通信

    WebDriver 协议被组织成命令。每个带有规范中定义的方法和模板的HTTP request 代表一个命令,因此每个命令都会产生一个HTTP response。为响应命令,remote end 将运行一系列称为远程结束步骤 的操作。这些提供了远程端在接收到特定命令时采取的操作序列。


    命令处理

    远程端是一个 HTTP 服务器,它从客户端读取请求并通常通过 TCP 套接字写入响应。在规范中,通信被建模为特定local endremote end 之间的数据传输,其中远程端可以写入字节和读取字节。这种连接如何工作以及如何建立的确切细节是一个更大的话题,超出了这个问题的范围。建立连接后,远程端必须从连接中读取字节,直到可以从数据构造完整的 HTTP 请求。如果无法构造完整的 HTTP 请求,则远程端要么关闭连接,要么返回状态码为 500 的 HTTP 响应,要么返回错误码未知的错误。

    【讨论】:

    • @Jcyrss 查看更新后的答案,如果您有任何问题,请告诉我。
    • 谢谢。但这似乎都是关于 WebDriver 和驱动程序(如 ChromeDriver)之间的接口,而不是驱动程序(如 ChromeDriver)和浏览器(如 Chrome)之间的接口。为什么我对此感到好奇?微软为我们带来了基于 Chromium 的边缘浏览器,我们需要使用 Selenium 将其自动化。据我所知,Chromium 具有内置的 Web 自动化支持(这是真的,因为我们可以使用 Chromedriver 自动化 Electron App)。我想知道如果现有的 ChromeDriver 已经可以驱动基于 Chromium 的浏览器,为什么还要麻烦 MS 提供 Edge 驱动程序?
    • @Jcyrss 我相信您还没有阅读完整的答案。但是,您的问题涉及 Chromedriver 充当 HTTP 服务器ChromeDriver 与 Chrome 通信HTTP 协议 根据 stackoverflow 标准过于宽泛,我不应该t 已经回答了摆在首位。现在您添加了更多关于驱动程序(如 ChromeDriver)和浏览器(如 Chrome)之间的接口基于 Chromium 的 Edge 浏览器Electron 应用程序 的问题i>,根据 SO 提供的空间,答案会太大。
    • 我不认为我问的问题太笼统。而且我不认为这篇文章回答了我的问题。因为我终于找到了真正的答案。 Chrome 驱动通过基于 websocket 的 Chrome DevTools 协议控制 chrome。 This article 提供更多详情
    【解决方案2】:

    为了方便查找,我将 anwser 从 cmets 移到这里。

    Chrome驱动通过基于websocket的ChromeDevTools Protocol控制Chrome浏览器。 This article 提供更多详情

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-01-09
      • 2020-08-05
      • 1970-01-01
      • 1970-01-01
      • 2017-05-04
      • 1970-01-01
      相关资源
      最近更新 更多