如何在Chrome驱动程序中禁用WebRTC?

时间:2017-06-16 23:29:32

标签: java selenium selenium-chromedriver

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

2 个答案:

答案 0 :(得分:2)

我找到了解决方案。

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

  1. 启动Chrome浏览器并在Chrome网上应用店中搜索获取CRX扩展程序,然后安装Get CRX。
  2. 现在,如果您在Chrome网上应用店中搜索任何其他扩展程序,请打开其页面并右键单击页面上的任何位置,您将在上下文菜单中看到“获取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);
    
  4. 此代码将.crx扩展名添加到Chrome选项中。扩展名必须是base64编码的。我使用Apache Commons lib对其进行编码(import org.apache.xerces.impl.dv.util.Base64)。

    现在,您的Chrome驱动程序将使用WebRTC阻止扩展程序启动,因此,WebRTC将被禁用。

    但是这种方法并不理想,因为在这种情况下,您将在浏览器插件中使用WebRTC阻止扩展。所以,如果你想在测试一些网站(即不同的IP,不同的窗口大小,不同的用户代理,不同的插件)时完全随机,它将不会是这样的,因为你将始终拥有相同的插件。

    因此,如果有人知道如何在没有扩展名的情况下禁用WebRTC,那么我们将非常感激。

答案 1 :(得分:0)

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

{{1}}

可在Chrome 72上使用,但应在所有48版及更高版本上使用。