Proxy 带有公司代理授权的Chrome无头浏览器不工作
我正在尝试运行一个Chrome无头浏览器,它位于一个公司代理的后面。我尝试了下面的代码。但无法通过它Proxy 带有公司代理授权的Chrome无头浏览器不工作,proxy,selenium-chromedriver,basic-authentication,headless,chrome-options,Proxy,Selenium Chromedriver,Basic Authentication,Headless,Chrome Options,我正在尝试运行一个Chrome无头浏览器,它位于一个公司代理的后面。我尝试了下面的代码。但无法通过它 public class HeadlessChrome { WebDriver driver; @Test public void createChromeDriverHeadless() throws InterruptedException { System.setProperty("webdriver.chrome.driver", "D
public class HeadlessChrome
{
WebDriver driver;
@Test
public void createChromeDriverHeadless() throws InterruptedException
{
System.setProperty("webdriver.chrome.driver", "D:\\LocalData\\workspace\\Drivers and Libraries\\driver\\chromedriver.exe");
ChromeOptions chromeOptions = new ChromeOptions();
Proxy proxy = new Proxy();
proxy.setHttpProxy("http://user:pwd@server:port");
proxy.setSslProxy("http://user:pwd@server:port");
// chromeOptions.setCapability("proxy", proxy);
chromeOptions.addArguments("--proxy-server=user:pwd@server:port");
chromeOptions.addArguments("--headless");
chromeOptions.addArguments("--disable-gpu");
chromeOptions.addArguments("start-maximized");
driver = new ChromeDriver(chromeOptions);
driver.get("http://seleniumhq.org");
Thread.sleep(5000);
System.out.println("Title : " + driver.getTitle());
assertTrue(driver.findElement(By.id("q")).isDisplayed());
driver.quit();
}
}
请帮助我。如果您没有使用无头您可以使用下面链接中的方法 但目前不允许使用无头扩展。现在,您可以选择添加另一个代理
chrome -> (intermediate proxy w/o auth) -> corporate proxy w/ auth -> internet
一种选择是使用polipo
使用下面的配置
parentAuthCredentials=username:password
parentProxy=corporateproxy:port
然后使用
chromeOptions.addArguments("--proxy-server=http://polipoproxy:port");
polipo配置中的“请勿覆盖”中的默认值为127.0.0.1:8123
您可以使用的其他选项
- 使用squid代理代替polipo
- 使用python、node或任何其他您熟悉的语言编写您自己的代理转发器
有一种叫做Linken sphere的无头浏览器,它与Luminati合作。他们提出了一些很好的建议。你应该检查一下。
使用(目前处于测试阶段)很容易实现。您可以通过多种方式执行此操作:
基本上,您需要注册一个检查,检查是否为任何授权请求应用凭据。适用于基本和代理身份验证弹出窗口
ChromeDriver driver = new ChromeDriver(new ChromeOptions().setHeadless(true));
String USER_NAME = "guest";
String PASSWORD = "guest";
//register our check here
driver.register(UsernameAndPassword.of(USER_NAME, PASSWORD));
driver.get("https://jigsaw.w3.org/HTTP/");
//Click on the link to show an authentication popup
driver.findElement(By.linkText("Basic Authentication test")).click();
String msg = driver.findElement(By.tagName("html")).getText();
assert msg.equalsIgnoreCase("Your browser made it!");
ChromeDriver driver = new ChromeDriver(new ChromeOptions().setHeadless(true));
String USER_NAME = "guest";
String PASSWORD = "guest";
DevTools devTools = driver.getDevTools();
//create a cdp session
devTools.createSession();
//enable Fetch first
devTools.send(Fetch.enable(Optional.empty(), Optional.of(true)));
devTools.addListener(Fetch.requestPaused(), requestPaused -> devTools.send(Fetch.continueRequest(requestPaused.getRequestId(), Optional.empty(), Optional.empty(), Optional.empty(), Optional.empty())));
devTools.addListener(Fetch.authRequired(), authRequired -> devTools.send(Fetch.continueWithAuth(authRequired.getRequestId(), new AuthChallengeResponse(PROVIDECREDENTIALS, Optional.of(USER_NAME), Optional.of(PASSWORD)))));
//Open website
driver.get("https://jigsaw.w3.org/HTTP/");
//Click on the link to show an authentication popup
driver.findElement(By.linkText("Basic Authentication test")).click();
String msg = driver.findElement(By.tagName("html")).getText();
assert msg.equalsIgnoreCase("Your browser made it!");
使用。不适用于代理授权弹出窗口(例如,这里是类似于chrome项目中的Puppeter)
您是否尝试过chromeOptions.addArguments(“--proxy server”=http://user:pwd@服务器:端口“)代码><需要代码>http://
是的,我试过了,但运气不好。它更像是一个评论,而不是一个答案。
ChromeDriver driver = new ChromeDriver(new ChromeOptions().setHeadless(true));
String USER_NAME = "guest";
String PASSWORD = "guest";
DevTools devTools = driver.getDevTools();
//create a cdp session
devTools.createSession();
//enable Fetch first
devTools.send(Fetch.enable(Optional.empty(), Optional.of(true)));
devTools.addListener(Fetch.requestPaused(), requestPaused -> devTools.send(Fetch.continueRequest(requestPaused.getRequestId(), Optional.empty(), Optional.empty(), Optional.empty(), Optional.empty())));
devTools.addListener(Fetch.authRequired(), authRequired -> devTools.send(Fetch.continueWithAuth(authRequired.getRequestId(), new AuthChallengeResponse(PROVIDECREDENTIALS, Optional.of(USER_NAME), Optional.of(PASSWORD)))));
//Open website
driver.get("https://jigsaw.w3.org/HTTP/");
//Click on the link to show an authentication popup
driver.findElement(By.linkText("Basic Authentication test")).click();
String msg = driver.findElement(By.tagName("html")).getText();
assert msg.equalsIgnoreCase("Your browser made it!");