selenium 连接已经打开的chrome浏览器

有时我们会遇到希望 Selenium 连接并使用先前手动或由其他程序打开的现有浏览器的情况。

为什么我们希望 Selenium 连接到之前打开的浏览器?

也许您想在启动自动化执行之前执行一些需要手动干预的任务。例如,我们可能需要手动启动浏览器,导航到所需的页面,执行一些手动任务,例如手动输入验证码,然后运行自动化脚本以从那里继续。

单击桌面应用程序上的按钮可打开网页。我们还有一些其他工具用于自动化桌面应用程序,但我们希望 Selenium 在网页打开时立即进行控制。

调试——让我们假设我们正在为应用程序中的某个屏幕(产品结帐)编写测试脚本。但到达该页面(添加到购物车)的脚本尚未准备好。我们可以手动启动浏览器并导航到该页面,然后运行自动化脚本。

现在,我们回到最初的问题——如何将 Selenium 连接到现有的浏览器会话?

我们可以利用Chrome DevTools 协议。它允许客户检查和调试 Chrome 浏览器。

先决条件:将 Chrome 添加到 PATH

请确保 chrome 可执行文件的路径已添加到环境变量中PATH。您可以通过运行命令chrome.exe(在 Windows 上)或Google/ Chrome(在 Mac 上)来检查它。它应该启动 Chrome 浏览器。

如果您收到如下类似消息,则表示 Chrome 尚未添加到您的系统路径中:

'chrome' is not recognized as an internal or external command,operable program or batch file.

如果是这种情况,请随时 Google如何将 chrome 添加到 PATH?如果您使用的是 Mac,请按照以下的步骤操作:

打开终端输入 

vi ~/.bash_profile

如果没有加过PATH,输入

export PATH="/Applications/Google Chrome.app/Contents/MacOS:$PATH"

把路径输进去以后按下键盘左上角的Esc 键退出编辑,然后按:,输入wq 保存即可退出。

一般我们重启一下 Terminal 即可,不过通过source ~/.bash_profile 这样直接重新加载一下更省事。

第 1 步:使用自定义标志启动浏览器

为了使 Chrome 能够打开端口进行远程调试,我们需要使用自定义标志来启动它 –

chrome.exe --remote-debugging-port=9222 --user-data-dir="C:\selenum\ChromeProfile"

对于Mac:

Google\ Chrome --remote-debugging-port=9222 --user-data-dir="~/ChromeProfile"

对于 --remote-debugging-port值,您可以指定任何打开的端口。

对于--user-data-dir标志,您需要传递一个目录,将在其中创建新的 Chrome 配置文件。它的存在只是为了确保 chrome 在单独的配置文件中启动,并且不会污染您的默认配置文件。

一旦 Chrome 以这种方式启动,它就会在给定端口上打开一个连接,任何客户端都可以连接到该端口进行调试。

您现在可以手动使用浏览器,导航到尽可能多的页面,执行操作,一旦您需要自动化代码来负责,您就可以运行自动化脚本。您只需要修改 Selenium 脚本即可使 Selenium 连接到打开的浏览器。

您可以验证 Chrome 是否以正确的方式启动:

正常启动一个新的浏览器窗口(没有任何标志),然后导航到http://127.0.0.1:9222

确认您是否在第二个浏览器窗口中看到 Google 主页参考

第 2 步:启动浏览器并提供选项

这是简单但神奇的 Java 和 Python 代码。您可以轻松地将其转换为您选择的编程语言。

// JAVA Example

import org.openqa.selenium.WebDriver;

import org.openqa.selenium.chrome.ChromeDriver;

import org.openqa.selenium.chrome.ChromeOptions;

//Change chrome driver path accordingly

System.setProperty("webdriver.chrome.driver", "C:\\selenium\\chromedriver.exe");

ChromeOptions options = new ChromeOptions();

options.setExperimentalOption("debuggerAddress", "127.0.0.1:9222");

WebDriver driver = new ChromeDriver(options);

System.out.println(driver.getTitle());

# PYTHON Example

from selenium import webdriver

from selenium.webdriver.chrome.options import Options

chrome_options = Options()

chrome_options.add_experimental_option("debuggerAddress", "127.0.0.1:9222")

#Change chrome driver path accordingly

chrome_driver = "C:\chromedriver.exe"

driver = webdriver.Chrome(chrome_driver, chrome_options=chrome_options)

print driver.title

Mac-Python:

from selenium import webdriver

from selenium.webdriver.chrome.options import Options

options = Options()

options.add_experimental_option("debuggerAddress", "127.0.0.1:12306")

driver = webdriver.Chrome(options=options)

debuggerAddress 下的值是多少?

URL127.0.0.1表示您的本地主机。我们提供了相同的端口,IE9222,我们用来启动 Chrome 的--remote-debugging-port标志。虽然您可以使用任何端口,但您需要确保它已打开且可供使用。


故障排除

我无法连接到浏览器窗口。

确认您是否按照教程中所述的方式启动了浏览器

www.google.com在同一浏览器窗口中手动转到

正常启动一个新的浏览器窗口(没有任何标志),然后导航到http://127.0.0.1:9222

确认您是否在第二个浏览器窗口中看到 Google 主页参考

我可以手动连接到浏览器窗口,但不能通过代码连接。

验证您已导入正确的包。请参阅上面的代码块。

根据您安装的 Chrome 版本检查您是否拥有正确的 Chrome 驱动程序。

如果您发现本教程有用,请与世界分享。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

友情链接更多精彩内容