Selenium在Webdriver规范中的作用,以及让浏览器接受webdriver请求

时间:2018-01-21 02:24:49

标签: google-chrome selenium webdriver

我现在正在使用Selenium来控制Chrome。我对Selenium协议和关于WebDrivers的W3c标准感到困惑。

问题:Selenium的协议和Webdriver标准之间的关系是什么? Web浏览器是否内置于浏览器中?

我知道浏览器会公开webdriver interface。这基本上是一堆网址。

更具体地说(尽管它们是相同问题)的不同方面:

  • 我半理解Selenium有自己的协议,类似于" W3规格说的是什么。我无法找到有关差异的信息。这些是什么?它们会聚合吗?

  • 为什么Selenium需要Chromedriver? (尤其是Chromedriver浏览器)它是否只能直接连接到Chrome实例?

  • Selenium提供服务器,然后将请求转发到远程浏览器。我的理解是,无头客户端与服务器通信,该服务器运行无头Chrome并向无头客户端报告答案。这只是一个纯粹的代理"? selenium服务器是否使用W3 API?

  • 如果我在W3规范周围写了一个薄层(也就是说,只是一个makeNow的脚本...... 按照W3协议调用),如何直接与浏览器通信?我无法在任何地方找到关于如何做到这一点的明确指示

  • 再次使用我的薄层:如果我想控制远程浏览器,我是否只需要将这些调用代理到运行无头镀铬的服务器?

我想这个问题归结为:

  • 如果我想彻底摆脱Selenium,只是赤裸裸地使用这些规格,我能做到吗?如果是这样,怎么样?我会不会错过"上?

更新1 :我刚刚意识到ChromeDriver可执行文件实际上是由Google自己发布的。它不是Selenium!所以,我想我可以运行ChromeDriver命令并连接到它......

1 个答案:

答案 0 :(得分:2)

  

我半理解Selenium有自己的协议,类似于" W3规格说的是什么。我无法找到有关差异的信息。这些是什么?它们是否趋同?

没有一个不同的协议......它是一个不同的东西。 this document explains it all。它归结为Selenium发布了Selenium JSON Wire Protocol' (他们是在2004年到2009年之间开发的......一生以前!)长话短说:

  

Selenium 2发布一段时间后,浏览器厂商开始自己实施Selenium JSON Wire Protocol!好极了!这很有意义:它们处于维护服务器端的最佳位置,并且可以直接在浏览器中构建必要的行为。   它始于2009-2011的OperaDriver,然后是其他人,例如ChromeDriver和Mozilla的geckodriver与Marionette。这就是WebDriver标准的动机来源。

该链接也包含其余内容。

  

为什么Selenium需要Chromedriver? (尤其是Chromedriver浏览器)它是否只能直接连接到Chrome实例?

ChromeDriver是接受HTTP调用以打开浏览器窗口并模拟用户交互的软件。为了保持实用性,Chromedriver将实施例如:

POST    /session    New Session
DELETE  /session/{session id}   Delete Session
GET /status Status
GET /ses has the has thesion/{session id}/timeouts  Get Timeouts
POST    /session/{session id}/timeouts  Set Timeouts
POST    /session/{session id}/url   Navigate To
GET /session/{session id}/url   Get Current URL

电话很简单,而且没有那么多。

  

Selenium提供了一个服务器,然后将请求转发到远程浏览器。我的理解是,无头客户端与服务器通信,该服务器运行无头Chrome并向无头客户端报告答案。这只是一个纯粹的代理"? selenium服务器是否使用W3 API?

是的,你(好吧,我,那是)是对的:它只是作为代理。但它也可以很酷!例如,您可以连接到远程WebDriver,并说“我希望在此系统上使用此浏览器&#34 ;; webdriver将有一个特定驱动程序列表,并将尝试在符合您要求的浏览器上运行该命令。

  

如果我围绕W3规范写了一个薄层(也就是说,只是一个按照W3协议进行调用的脚本),我该如何直接与浏览器对话?我无法在任何地方找到关于如何做到这一点的明确指示

您无法直接与浏览器对话 - 您可以与ChromeDriver交谈,然后ChromeDriver会为您进行交谈:D

  

再次使用我的薄层:如果我想控制远程浏览器,我是否只需要将这些调用代理到运行无头镀铬的服务器?

Webdriver客户端不需要知道它是否与45个无头浏览器和3个不同操作系统的代理进行通信。无论如何协议都是一样的。

  

如果我想彻底摆脱Selenium,并且只是赤裸裸地使用这些规格,我能做到吗?如果是这样,怎么样?我会错过什么"上吗

欢迎您实施图书馆并跳过 selenium webdriver 库。 The specs are available并准备好使用。但!请记住,只有Firefox可以完全实现规范,今天,Chrome's webdriver status is pretty poor,尽管这种情况很快就会发生变化。