我想在 Chrome 驱动程序中禁用 WebRTC,但不知道如何操作。
我尝试这样(在一些博客中找到了这个解决方案):
capabilities.setCapability("chrome.switches", Arrays.asList(
"--disable-webrtc-multiple-routes", "--disable-webrtc-hw-encoding",
"--disable-webrtc-hw-decoding", "--disable-webrtc-encryption"));
这不起作用。是的,我知道那里没有像“--disable-webrtc”这样的东西,但这是我找到的关于 WebRTC 的所有内容,我的意思是,我没有找到其他一些 WebRTC 参数。
我在这里搜索:https://src.chromium.org/viewvc/chrome/trunk/src/chrome/common/chrome_switches.cc
那里:https://src.chromium.org/viewvc/chrome/trunk/src/chrome/common/pref_names.cc
未找到任何有关 WebRTC 的信息。
最佳答案
我找到了解决方案。
我不知道如何直接在 Chrome 驱动程序设置中禁用 WebRTC,但还有另一种方法:添加一些 WebRTC 阻止扩展程序。我是这样做的:
- 启动 Chrome 浏览器并在 Chrome 网上应用店中搜索 Get CRX 扩展程序,然后安装 Get CRX。
- 现在,如果您在 Chrome 网上应用店中搜索任何其他扩展程序,打开其页面并右键单击页面上的任意位置,您将在上下文菜单中看到“获取 CRX”。找到您最喜欢的 WebRTC 阻止扩展程序,打开其页面并单击“获取 CRX”。下载 .crx 文件。现在,您已在此 .crx 文件中添加了 WebRTC 阻止扩展程序,并且可以在 Chrome 驱动程序中使用它。
使用此代码启动带有扩展程序的 Chrome 驱动程序:
Map<String, Object> chromeOptions = new HashMap<String, Object>(); ArrayList<String> ext = new ArrayList<String>(); byte[] byteExt = Files.readAllBytes(new File("path to .crx file").toPath()); ext.add(Base64.encode(byteExt)); chromeOptions.put("extensions", ext); DesiredCapabilities capabilities = DesiredCapabilities.chrome(); capabilities.setCapability(ChromeOptions.CAPABILITY, chromeOptions); WebDriver driver = new ChromeDriver(capabilities);
此代码将 .crx 扩展名添加到 Chrome 选项中。扩展名必须是 base64 编码的。我使用 Apache Commons lib 对其进行编码(导入 org.apache.xerces.impl.dv.util.Base64)。
现在,您的 Chrome 驱动程序将使用 WebRTC 阻止扩展程序启动,因此,WebRTC 将被禁用。
但这种方法并不理想,因为在这种情况下,您将在浏览器插件中阻止 WebRTC 扩展。所以,如果你想在测试某个站点时完全随机(即不同的 IP、不同的窗口大小、不同的用户代理、不同的插件),它不会是这样的,因为你将始终拥有相同的插件。
因此,如果有人知道如何在没有扩展的情况下禁用 WebRTC,我们将不胜感激。
关于java - 如何在 Chrome 驱动程序中禁用 WebRTC?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44599265/