【问题标题】:How do I disable WebRTC in Chrome Driver?如何在 Chrome 驱动程序中禁用 WebRTC?
【发布时间】:2017-06-16 23:29:32
【问题描述】:

我想在 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 的信息。

【问题讨论】:

  • 您能否考虑帮助我们更新 WebRTC 的全部内容?
  • @Debanjan 你的意思是解释 WebRTC 是什么? en.wikipedia.org/wiki/WebRTC。我想禁用它,因为当我使用代理并启用 WebRTC 时,某些流量会直接进入(没有代理)。所以,如果启用了 WebRTC 有泄漏,一些网站可以知道我的真实 ip。
  • 所以这意味着使用代理并启用WebRTC时会出现WebRTC问题。您确定通过功能禁用 WebRTC 并包含代理是否能满足您的需求?由于我没有使用任何代理,我无法测试我想为您提供的解决方案。谢谢
  • @DebanjanB 是的,我确定。

标签: java selenium selenium-chromedriver


【解决方案1】:

这是一种在 Python 中部分禁用 webRTC 的方法。这些是 webRTC 扩展/插件在 Chrome 中切换的选项。这些选项可防止 IP 泄漏问题。 Java 可能类似。

# partially disable webrtc
preferences = {
    "webrtc.ip_handling_policy" : "disable_non_proxied_udp",
    "webrtc.multiple_routes_enabled": False,
    "webrtc.nonproxied_udp_enabled" : False
}
chrome_options.add_experimental_option("prefs", preferences)

适用于 Chrome 72,但应该适用于所有版本 48 及更高版本。

【讨论】:

  • 禁用 WebRTC 中的特定功能,而不是整个 WebRTC。
  • 虽然这些选项仅部分禁用 webRTC,但它们可以防止所有 webRTC IP 泄漏问题。对于包括我自己在内的许多人来说,这是禁用 webRTC 的主要原因。这是迄今为止最好的工作解决方案。
  • 我测试过了,就是没用,而且我的ip在泄露的ip列表中!
【解决方案2】:

我找到了解决办法。

我不知道如何直接在 Chrome 驱动设置中禁用 WebRTC,但是还有另一种方法:添加一些 WebRTC 阻止扩展。这是我的做法:

  1. 启动 Chrome 浏览器并在 Chrome Webstore 中搜索 Get CRX 扩展程序,然后安装 Get CRX。
  2. 现在,如果您在 Chrome Webstore 中搜索任何其他扩展程序,打开其页面并右键单击该页面的任意位置,您将在上下文菜单中看到“获取 CRX”。找到您最喜欢的 WebRTC 阻止扩展,打开其页面并单击“获取 CRX”。下载 .crx 文件。现在,您在这个 .crx 文件中拥有了 WebRTC 阻止扩展,并且可以在 Chrome 驱动程序中使用它。
  3. 使用此代码启动带有扩展程序的 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,我们将不胜感激。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2015-07-11
    • 1970-01-01
    • 1970-01-01
    • 2018-12-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-12-24
    相关资源
    最近更新 更多