如何使用chrome驱动程序使用Java覆盖selenium2中的基本身份validation?

如何在selenium2 chrome驱动程序中覆盖基本身份validation? 我在我的项目中面临一个问题,即“需要身份validation”弹出窗口即将阻止webdriver继续导航。 请找到相同的附件截图。 在此处输入图像描述 我使用以下代码来实例化chrome驱动程序,

private WebDriver driver; @Override protected void setUp() throws Exception { super.setUp(); System.setProperty("webdriver.chrome.driver", "C:/Selenium/chromedriver.exe"); driver = new ChromeDriver(); } @Override protected void tearDown() throws Exception { // TODO Auto-generated method stub super.tearDown(); } 

能否请你帮忙 –

谢谢,

我在一个多小时内遇到了同样的问题,最后@ kenorb的解决方案救了我。 简而言之,您需要添加一个浏览器扩展,为您进行身份validation(因为Selenium本身不能这样做!)。

以下是ChromePython的工作原理:

  1. 创建一个包含两个文件的zip文件proxy.zip

background.js

 var config = { mode: "fixed_servers", rules: { singleProxy: { scheme: "http", host: "YOU_PROXY_ADDRESS", port: parseInt(YOUR_PROXY_PORT) }, bypassList: ["foobar.com"] } }; chrome.proxy.settings.set({value: config, scope: "regular"}, function() {}); function callbackFn(details) { return { authCredentials: { username: "YOUR_PROXY_USERNAME", password: "YOUR_PROXY_PASSWORD" } }; } chrome.webRequest.onAuthRequired.addListener( callbackFn, {urls: [""]}, ['blocking'] ); 

不要忘记将YOUR_PROXY_ *替换为您的设置。

的manifest.json

 { "version": "1.0.0", "manifest_version": 2, "name": "Chrome Proxy", "permissions": [ "proxy", "tabs", "unlimitedStorage", "storage", "", "webRequest", "webRequestBlocking" ], "background": { "scripts": ["background.js"] }, "minimum_chrome_version":"22.0.0" } 
  1. 将创建的proxy.zip添加为扩展名

     from selenium import webdriver from selenium.webdriver.chrome.options import Options chrome_options = Options() chrome_options.add_extension("proxy.zip") driver = webdriver.Chrome(executable_path='chromedriver.exe', chrome_options=chrome_options) driver.get("http://google.com") driver.close() 

而已。 对我来说,就像一个魅力。 如果您需要动态创建proxy.zip或需要PHP示例,请转到原始post

我认为您正在谈论使用NTLM身份validationWindows集成身份validation )而不是基本身份validation您在URL中提供凭据 )。 假设您可以尝试在chrome中运行NTML auth:

方法1

转到Internet Explorer,然后打开“Internet选项”。 请遵循以下步骤:

  • 将您的站点添加到本地Intranet或可信站点 加
  • 项目清单
  • 项目清单
  • 项目清单
  • 项目清单

完成这些更改后,您的chrome身份validation应该有效。 如果您想知道IE设置如何影响Chrome行为,那么Chrome会使用IE安全设置进行身份validation。

一些好的资源/信用:

  1. 好细节
  2. Selenium问题详情

方法2

将您的站点添加到本地Intranet ,不要更改任何用于用户身份validation的内容。 默认情况下,选择第二个选项( 仅在Intranet站点中自动登录 )。

您可以尝试将登录凭据添加到url get请求(使用Java):

 driver.get("http://username:password@google.com/") 

我设法做两次发送凭据。 我不知道为什么,但是在第二次浏览器发送数据包时,身份validation标头会进行基本身份validation。

我的代码(使用C#):

 string url = "http://user:password@google.com/"; IWebDriver webDriver = new ChromeDriver(); webDriver.Navigate().GoToUrl(url); webDriver.Url = url; 

除配置网络代理首选项外 ,您还可以在/etc/environment设置http_proxy

其他方法是使用Chrome HTTP私有代理 (基于Chrome-proxy-helper )。

这是PHP示例(在README中找到):

 $pluginForProxyLogin = '/tmp/a'.uniqid().'.zip'; $zip = new ZipArchive(); $res = $zip->open($pluginForProxyLogin, ZipArchive::CREATE | ZipArchive::OVERWRITE); $zip->addFile('/path/to/Chrome-proxy-helper/manifest.json', 'manifest.json'); $background = file_get_contents('/path/to/Chrome-proxy-helper/background.js'); $background = str_replace(['%proxy_host', '%proxy_port', '%username', '%password'], ['5.39.64.181', '54991', 'd1g1m00d', '13de02d0e0z9'], $background); $zip->addFromString('background.js', $background); $zip->close(); putenv("webdriver.chrome.driver=/path/to/chromedriver"); $options = new ChromeOptions(); $options->addExtensions([$pluginForProxyLogin]); $caps = DesiredCapabilities::chrome(); $caps->setCapability(ChromeOptions::CAPABILITY, $options); $driver = ChromeDriver::start($caps); $driver->get('https://old-linux.com/ip/'); header('Content-Type: image/png'); echo $driver->takeScreenshot(); unlink($pluginForProxyLogin); 

同样的逻辑也适用于其他语言。

SeleniumHQ GitHub上已经报道了更便携的解决方案。

也可以看看:

  • 如何在Selenium WebDriver中对FirefoxDriver,ChromeDriver和IEdriver执行基本身份validation?
  • 如何在Selenium中发送基本身份validation标头? 在SQA SE