Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/383.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 如何在Chrome驱动程序中禁用WebRTC?_Java_Selenium_Selenium Chromedriver - Fatal编程技术网

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

Java 如何在Chrome驱动程序中禁用WebRTC?,java,selenium,selenium-chromedriver,Java,Selenium,Selenium Chromedriver,我想在Chrome驱动程序中禁用WebRTC,但不知道怎么做 我试着这样做(在一些博客中找到了这个解决方案): 它不起作用。是的,我知道这里没有类似于--“禁用webrtc”的东西,但这是关于webrtc的所有发现,我的意思是,我没有找到其他一些webrtc参数 我在这里搜索: 在那里: 没有找到关于WebRTC的任何信息。我找到了解决方案 我不知道如何在Chrome驱动程序设置中直接禁用WebRTC,但还有另一种方法:添加一些WebRTC阻塞扩展。我是这样做的: 启动您的Chrome浏览器并在

我想在Chrome驱动程序中禁用WebRTC,但不知道怎么做

我试着这样做(在一些博客中找到了这个解决方案):

它不起作用。是的,我知道这里没有类似于--“禁用webrtc”的东西,但这是关于webrtc的所有发现,我的意思是,我没有找到其他一些webrtc参数

我在这里搜索:

在那里:

没有找到关于WebRTC的任何信息。

我找到了解决方案

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

  • 启动您的Chrome浏览器并在Chrome Webstore中搜索Get CRX扩展,然后安装Get CRX
  • 现在,如果你在ChromeWebStore中搜索任何其他扩展,打开它的页面,右键单击页面上的任何位置,你会在上下文菜单中看到“GetCRX”。找到您喜爱的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);
    
    Map chromeOptions=new HashMap();
    ArrayList ext=新的ArrayList();
    byte[]byteExt=Files.readAllBytes(新文件(“指向.crx文件的路径”).toPath();
    ext.add(Base64.encode(byteExt));
    chromeOptions.put(“扩展名”,ext);
    DesiredCapabilities=DesiredCapabilities.chrome();
    能力。设置能力(ChromeOptions.CAPABILITY,ChromeOptions);
    WebDriver=新的ChromeDriver(功能);
    
  • 此代码将.crx扩展名添加到Chrome选项中。扩展必须是base64编码的。我使用ApacheCommons库对其进行编码(import org.Apache.xerces.impl.dv.util.Base64)

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

    但这种方法并不理想,因为在这种情况下,浏览器插件中会有WebRTC阻塞扩展。所以,如果你想在测试某个站点时完全随机(例如,不同的ip、不同的窗口大小、不同的用户代理、不同的插件),它不会是这样的,因为你总是有相同的插件


    因此,如果有人知道如何在没有扩展的情况下禁用WebRTC,我们将不胜感激。

    这里有一种在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和UP上工作。

    你能考虑帮助我们更新WebRTC的全部吗?“DeBayJun.你是指解释WebRTC是什么吗?”我想禁用它,因为当我使用代理并启用WebRTC时,部分流量会直接(不使用代理)传输。因此,如果启用了WebRTC,则存在漏洞,一些站点可以知道我的真实ip。因此,这意味着当使用代理并启用WebRTC时,会出现WebRTC问题。您是否确定通过功能禁用WebRTC并包括代理将满足您的需要?因为我没有使用任何代理,所以我没有办法测试我想提供给您的解决方案。Thanks@DebanjanB是的,我确定。这会禁用WebRTC中的特定功能,而不是整个WebRTC。虽然这些选项仅部分禁用WebRTC,但它们可以防止所有WebRTC IP泄漏问题。对于许多人,包括我自己,这是禁用webRTC的主要原因。这是迄今为止最好的工作解决方案。我做了测试,它只是不工作,我的ip在泄漏的ip列表中!
    # 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)