使用 Selenium Webdriver 控制 Chrome Devtools
Posted
技术标签:
【中文标题】使用 Selenium Webdriver 控制 Chrome Devtools【英文标题】:Controlling Chrome Devtools with Selenium Webdriver 【发布时间】:2015-12-23 18:51:58 【问题描述】:我希望通过 Selenium Webdriver 访问/使用 Chrome 的开发工具面板。
具体来说,我想使用通过 devtools 访问的“WASP”chrome 插件。我已经将我的 selenium 设置为使用包含的 WASP 插件运行,并且我可以打开 DevTools(使用 sendKeys.F12),但现在我不知道如何实际使用该面板,因为它已打开。有办法吗?
我发现最接近我的问题的是这个链接:Chrome Dev Tools API & Selenium WebDriver,但这对我一点帮助都没有。
另外,如果这看起来是不可能的(确实如此),任何人都可以想到一个解决方法吗?
【问题讨论】:
WebDriver 用于驱动浏览器并与网页交互。除了键盘快捷键之外,它不会控制开发工具。 Chrome 扩展程序也是一个“网页”,其地址类似于chrome-extension://some_gibrish/some_name.html
和一些执行某些操作的 JS。您可以从开发人员工具中监视实际 URL(扩展扩展名>右键单击检查>...)所以理论上您可以将该扩展名“注入”到您的页面上并使其运行其 JS 脚本...看起来很多工作,并且非常具体到每个扩展。
【参考方案1】:
在 Selenium 4 alpha 中,有一种方法可以使用 java-client 与 DevTools API 进行交互。您正在寻找的是“Profiler”域 (https://chromedevtools.github.io/devtools-protocol/tot/Profiler)
最近,我贡献了“网络”和“性能”域,以便在 selenium java 中更好地面向用户的 API - https://github.com/SeleniumHQ/selenium/pull/7212
相信“Profiler”也将很快实施。当然,前段时间合并的 Java 客户端有一个通用的所有域的 API,你可以这样使用它:
driver.getDevTools().createSession();
driver.getDevTools().send(new Command("Profiler.enable", ImmutableMap.of()));
driver.getDevTools().send(new Command("Profiler.start", ImmutableMap.of()));
//register to profiler events
driver.getDevTools().addListener(new Event("Profiler.consoleProfileStarted", ConsoleProfileStarted.class), new Consumer<Object>()
@Override
public void accept(Object o)
//do something
);
在将 Profiler 域添加到 Selenium java 客户端之前,您必须提供 Mapper。
【讨论】:
以上是关于使用 Selenium Webdriver 控制 Chrome Devtools的主要内容,如果未能解决你的问题,请参考以下文章
Selenium+WebDriver+Python 定时控制任务
多线程 Selenium WebDriver 与 Selenium Grid
selenium_webdriver(python)控制浏览器滚动条