如何使用带有 Java 的 Selenium webdriver 为 firefox 设置代理?

声明:本页面是StackOverFlow热门问题的中英对照翻译,遵循CC BY-SA 4.0协议,如果您需要使用它,必须同样遵循CC BY-SA许可,注明原文地址和作者信息,同时你必须将它归于原作者(不是我):StackOverFlow 原文地址: http://stackoverflow.com/questions/45810476/
Warning: these are provided under cc-by-sa 4.0 license. You are free to use/share it, But you must attribute it to the original authors (not me): StackOverFlow

提示:将鼠标放在中文语句上可以显示对应的英文。显示中英文
时间:2020-11-03 08:55:00  来源:igfitidea点击:

How do I set a proxy for firefox using Selenium webdriver with Java?

javaseleniumfirefox

提问by user8497118

System.setProperty("webdriver.gecko.driver", "E:\geckodriver-v0.18.0-win64\geckodriver.exe");
    Proxy p = new Proxy();
    p.setSocksProxy("83.209.94.87:35923");
    DesiredCapabilities cap = new DesiredCapabilities();
    cap.setCapability(CapabilityType.PROXY, p);
    WebDriver driver = new FirefoxDriver(cap);
    driver.get("https://www.google.com.au");

This code is inside the main method. When I run this code, firefox is launched but the google url isn't followed and the proxy is not set to the one I specify in the code above. How can I fix this?

此代码位于 main 方法中。当我运行此代码时,firefox 已启动,但未遵循 google url,并且代理未设置为我在上面的代码中指定的那个。我怎样才能解决这个问题?

public static void main(String[] args) throws InterruptedException, IOException, UnsupportedEncodingException {
    while (true) {
    System.setProperty("webdriver.gecko.driver", "E:\geckodriver-v0.18.0-win64\geckodriver.exe");
    WebDriver driver;
    String PROXY = "83.209.94.87:35923";
      //Bellow given syntaxes will set browser proxy settings using DesiredCapabilities.
      Proxy proxy = new Proxy();
      proxy.setAutodetect(false);
      proxy.setProxyType(Proxy.ProxyType.MANUAL);
      proxy.setSocksProxy(PROXY);
      DesiredCapabilities cap = new DesiredCapabilities();
      cap.setCapability(CapabilityType.PROXY, proxy);
      //Use Capabilities when launch browser driver Instance.
      driver = new FirefoxDriver(cap);`

回答by Tarun Lalwani

Because a bug you cannot use the Proxy object as of now. You should use the below code

因为一个错误,你现在不能使用 Proxy 对象。你应该使用下面的代码

    FirefoxProfile profile = new FirefoxProfile();
    profile.setPreference("network.proxy.type", 1);
    profile.setPreference("network.proxy.socks", "83.209.94.87");
    profile.setPreference("network.proxy.socks_port", 35923);

    FirefoxDriver driver = new FirefoxDriver(profile);
    driver.get("https://www.ipinfo.io");

The bug is discussed on https://github.com/mozilla/geckodriver/issues/764and you see what the Marionette driver do in background on below link

该错误在https://github.com/mozilla/geckodriver/issues/764上讨论,您可以在以下链接中看到 Marionette 驱动程序在后台执行的操作

https://dxr.mozilla.org/mozilla-central/source/testing/marionette/session.js#155

https://dxr.mozilla.org/mozilla-central/source/testing/marionette/session.js#155

So above code just replicates the same

所以上面的代码只是复制了相同的

回答by Jundat95

Work in Selenium 3.14.2, Firefox 62, C# .NET 4.5

在 Selenium 3.14.2、Firefox 62、C# .NET 4.5 中工作

FirefoxDriverService service = FirefoxDriverService.CreateDefaultService(@"GeckoDriver19", "geckodriver.exe");
service.FirefoxBinaryPath = @"C:\Program Files\Mozilla Firefox\firefox.exe";

FirefoxOptions firefoxOptions = new FirefoxOptions();
firefoxOptions.SetPreference("network.proxy.type", 1);
firefoxOptions.SetPreference("network.proxy.socks", "127.0.0.1");
firefoxOptions.SetPreference("network.proxy.socks_port", 1080);

IWebDriver driver = new FirefoxDriver(service, firefoxOptions);

driver.Navigate().GoToUrl("https://www.hbus.com/register");

回答by rajat

you can set proxy details with credentials here in your automation code as above answers explained but another way to do it without sharing your details in your java or python code with firefox profile.
firefox provides profiles, we can create profile for every user and customize it for proxy ,bookmarks etc.
windows user : open run(win+R) and type 'firefox -p'
linux user : run command 'firefox -p'
1- it will open a dialog box where you can create your profile then select that profile and open firefox.
2- open a new tab and search 'about:config'.accept the Risk and Continue then click on show all
3-here you can search and set all the property
example:
network.proxy.type  1
1 for Manually
2 for Automatic proxy
for Manuall proxy -
property                     value
network.proxy.http              your proxy ip
network.proxy.http_port               port number
network.proxy.ssl               your proxy ip
network.proxy.ssl_port               port number
network.proxy.ftp               your proxy ip
network.proxy.ftp_port               port number

您可以在自动化代码中使用凭据设置代理详细信息,如上述答案所述,但另一种方法是无需在您的 java 或 python 代码中与 firefox 配置文件共享您的详细信息。
firefox 提供配置文件,我们可以为每个用户创建配置文件,并为代理、书签等自定义配置文件。
windows 用户:打开运行(win+R)并输入“firefox -p”
linux 用户:运行命令“firefox -p”
1- it将打开一个对话框,您可以在其中创建您的配置文件,然后选择该配置文件并打开 Firefox。
2-打开一个新选项卡并搜索“about:config”。接受风险并继续,然后单击全部显示
3-在这里您可以搜索并设置所有属性
示例:
network.proxy.type  1
1 用于手动
2用于手动代理的自动代理
-
属性值
network.proxy.http 您的代理 ip
network.proxy.http_port 端口号
network.proxy.ssl 您的代理 ip
network.proxy.ssl_port 端口号
network.proxy.ftp 您的代理ip
network.proxy.ftp_port 端口号

(to find your profile name )
Linux : cd .mozilla/firefox/
windows: Press. +R on the keyboard. A Run dialog will open. Type in: %APPDATA%\Mozilla\Firefox\Profiles\ Click OK. A window will open containing profile folders now load this profile in java code

(查找您的配置文件名称)
Linux: cd .mozilla/firefox/
windows:按。键盘上的 +R。将打开一个运行对话框。输入:%APPDATA%\Mozilla\Firefox\Profiles\ 单击确定。将打开一个包含配置文件文件夹的窗口,现在在 Java 代码中加载此配置文件

FirefoxOptions options = new FirefoxOptions();
options.setUnhandledPromptBehaviour(UnexpectedAlertBehaviour.ACCEPT);
FirefoxProfile profile=new FirefoxProfile(new File("path of your profile"));
options.setProfile(profile);
WebDriver driver = new FirefoxDriver(options);
System.setProperty("webdriver.gecko.driver", "path of gecko driver");
driver.get("url");