当前位置: 首页 > 知识库问答 >
问题:

webdriver如何与浏览器通信/工作?

邹博裕
2023-03-14

我正在使用Selenium作为网络爬虫,它在大多数情况下运行良好,但一些网站可以检测到它,所以我决定深入学习。

经过一番搜索,我找到了"ChromeDevTools协议"和"Json Wire协议"。

“Json Wire Protocol”在Selenium和Webdriver之间工作,作为Python Java C#和其他语言的实现,因此它们可以通过统一协议与Webdriver通信,几篇文章解释了这一点。

但是我找不到任何关于网络驱动程序如何与浏览器通信的文章,有几篇文章说ChromeDriver通过“Chrome开发工具协议”与Chrome通信,但是他们没有解释细节,所以我不确定这一点是否正确。

浏览器如何从浏览器驱动程序接收命令并执行它?

共有2个答案

谭宜
2023-03-14

在与浏览器交互的高级selenium webdriver上,它不会转换为Javascripts命令,基本上我们的Java或Python代码将作为JSON wire协议中的api get和post请求发送。正如上面回答的那样,浏览器webdriver作为HTTP请求与真实浏览器交互。

每个浏览器驱动程序都使用HTTP服务器来接收HTTP请求。一旦URL到达浏览器驱动程序,它就会通过HTTP将该请求传递给真正的浏览器。完成后,Selenium脚本中的命令将在浏览器上执行。

如果请求是POST request,则浏览器上会有一个操作。如果请求是GET请求,那么相应的响应将在浏览器端生成。然后,它将通过HTTP发送到浏览器驱动程序,并通过JSON Wire协议发送到浏览器驱动程序,然后发送到UI。

  • 测试命令通过JSON wire协议转换为HTTP请求
  • 执行任何测试用例之前,每个浏览器都有自己的驱动程序来初始化服务器
  • 然后浏览器开始通过其驱动程序接收请求

欲了解更多信息,请访问以下网站

BrowserStack:-https://www.browserstack.com/guide/selenium-webdriver-tutorial

硒开发:-https://www.selenium.dev/documentation/en/webdriver/understanding_the_components/

埃杜雷卡:-https://www.edureka.co/blog/selenium-webdriver-architecture/

蒋栋
2023-03-14

WebDriver基本上允许您为7个已知浏览器定义驱动程序对象。

WebDrive是一个接口,而远程WebDriver实现Web驱动程序接口

所有提到的7个类(chromedriversafaridriveredgeDriver等等)扩展了RemoteWebDriver类。

下面是webdriverbroswer之间的通信流程:

>

  • 对于每个Selenium命令,都会创建一个HTTP请求并发送到浏览器驱动程序

    浏览器驱动程序使用HTTP服务器获取HTTP请求

    HTTP服务器确定实现Selenium命令所需的步骤

    实现步骤在浏览器上执行

    执行状态被发送回HTTP服务器

    HTTP服务器将状态发送回自动化脚本

    请在这里阅读更多信息

  •  类似资料:
    • 问题内容: 为了澄清当我询问浏览器到浏览器的通信时,我的意思是在转发消息之间没有服务器。我想为游戏实现这样的功能。如果无法在websockets中使用p2p,是否有类似的选择?任何帮助表示赞赏。 问题答案: 否。浏览器只能启动WebSockets连接,不能接收它们。在W3C的浏览器API规范只定义了如何启动出站连接。 您可以创建一个既可以启动也可以接受WebSockets连接的应用程序,但是浏览器

    • 通常情况下,您使用selenium来自动化测试用例,在测试用例运行完毕后,浏览器关闭。 然而,我尝试使用selenium webdriver编写特定任务的脚本,例如登录到特定页面,但浏览器在登录后应保持打开状态。 我开发了门户,这样,如果我早上开始工作,我就不必登录所有的后端,我只需要登录一次我的门户,从那里我就可以触发我需要的一切。 我这样做是为了登录到typo3后端(片段): 您可以看到,我在

    • 问题内容: 对于我的Rails 3.1应用程序上的Cucumber场景,我使用了@javascript标记,因此Selenium已激活。我收到以下错误: 如果可能的话,我想使用Google Chrome浏览器作为浏览器-而不是Firefox(我尚未安装)。这可能吗?该怎么办? 实际上,Cucumber / Selenium不应检测并使用浏览器吗? ====编辑==== 添加后 …到features

    • 我在Firefox中远程使用Webdriver。 我想全屏打开我的浏览器。浏览器是全屏打开的,但立即最小化,并移动到其他程序,在我的操作系统上打开。当我在本地运行我的webdriver时,broser是全屏打开的,并且不会最小化(它留在浏览器中,不会移动到其他程序)。我希望我的浏览器会在全屏打开,并且保持在浏览器中,即使我运行我的测试Remottley。 原因是我使用了Java机器人,我必须在浏览

    • 问题内容: 我正在使用selenium webDriver为一个Web应用程序编写测试,并且遇到一种情况,当我尝试关闭浏览器时,我会弹出一个对话框:“确定吗?”页面要求您确认要离开- 输入的数据将迷路了。” 有2个按钮:“离开页面”和“停留在页面上” 如何单击这些按钮? 问题答案: 为我解决了这个问题