繁体   English   中英

如何使用 Selenium webdriver 和 Java 为 firefox 设置代理?

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

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");

这段代码在 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);`

因为一个错误,你现在不能使用 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");

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

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

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

在 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");

您可以在自动化代码中使用凭据设置代理详细信息,如上述答案所述,但另一种方法是无需在您的 java 或 python 代码中与 firefox 配置文件共享您的详细信息。
firefox 提供配置文件,我们可以为每个用户创建配置文件,并为代理、书签等自定义它。
windows用户:打开运行(win+R)并输入'firefox -p'
linux 用户:运行命令“firefox -p”
1- 它将打开一个对话框,您可以在其中创建您的配置文件,然后选择该配置文件并打开 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 端口号

(查找您的个人资料名称)
Linux : cd .mozilla/firefox/
窗户:按。 键盘上的 +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");

使用 Java-Selenium 4.1.1 版,以下代码适用于我:

import org.openqa.selenium.Proxy;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.firefox.FirefoxDriver;
import org.openqa.selenium.firefox.FirefoxOptions;

...

Proxy proxy = new Proxy();
proxy.setHttpProxy("myproxy:80");
proxy.setSslProxy("myproxy:80");

FirefoxOptions firefoxOptions = new FirefoxOptions();
firefoxOptions.setProxy(proxy);

WebDriver driver = new FirefoxDriver(firefoxOptions);

如果您愿意,可以将所有内容都放在一行中:

WebDriver driver = new FirefoxDriver(new FirefoxOptions().setProxy(new Proxy().setHttpProxy("myproxy:80").setSslProxy("myproxy:80")));

有关更多代理设置,请参阅: Selenium 代理 API

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM