如何在selenium chromedriver中使用经过验证的代理?

时间:2015-05-26 06:39:17

标签: python google-chrome selenium selenium-chromedriver

经过几个小时的搜索,我开始认为这是不可能的。

我需要为每次运行使用不同的经过身份验证的(非公开的)代理来运行Chrome通过selenium。

@JoinColumn

Chrome会启动并显示错误:

PROXY_IP = "<some IP address>"
UID = "<the user id>"
PWD = "<the password">

options = webdriver.ChromeOptions()
options.add_argument("--proxy-server=%s:%s@%s" % (UID,PWD,PROXY_IP))

driver = webdriver.Chrome(executable_path=".\\driver\\chromedriver.exe",
                          chrome_options=options)
driver.get("<site URL>")

如果我使用不需要身份验证的公共代理......

This webpage is not available
ERR_NO_SUPPORTED_PROXIES

...它运行得很好并在使用代理时显示网站。

我还在用户ID前面尝试了PROXY_IP = "<public proxy IP address>" options = webdriver.ChromeOptions() options.add_argument("--proxy-server=%s" % PROXY_IP) driver = webdriver.Chrome(executable_path=".\\driver\\chromedriver.exe", chrome_options=options) driver.get("<site URL>") 的变体:

http://

事实上,我已经进行了广泛的搜索并找不到解决方案,这让我相信没有一个可能存在。

我确实找到了这个,但我无法理解它:

selenium chromedriver authentication proxy

不确定options.add_argument("--proxy-server=http://%s:%s@%s" % (UID,PWD,PROXY_IP)) 是或应该做什么,或者如何在Python中实现和测试。除非绝对必要,否则我讨厌堆积创可贴解决方案。

7 个答案:

答案 0 :(得分:4)

我已经检查了网络上的大多数解决方案,并且没有一个通过chrome / firefox所需的身份验证功能正常运行。请检查此链接:https://github.com/webdriverio/webdriverio/issues/324。最后,临时解决方案是使用代理提供商将您的IP地址列入白名单。

答案 1 :(得分:2)

尝试了许多实际上无法正常工作的解决方案之后,我终于设法使用先前答案中建议的扩展名来设置经过身份验证的代理。 您需要做的就是输入此链接:

http://crxextractor.com/ 并粘贴以下网址: https://www.crx4chrome.com/crx/1446/

它将使您无需安装即可将扩展下载为.crx文件。 比我使用这段代码:

proxy = {'address': 'pr.oxylabs.io:7777',
     'username': 'USERNAME',
     'password': 'PASSWORD'}

capabilities = dict(DesiredCapabilities.CHROME)
capabilities['proxy'] = {'proxyType': 'MANUAL',
                         'httpProxy': proxy['address'],
                         'ftpProxy': proxy['address'],
                         'sslProxy': proxy['address'],
                         'noProxy': '',
                         'class': "org.openqa.selenium.Proxy",
                         'autodetect': False,
                         'socksUsername': proxy['username'],
                         'socksPassword': proxy['password']}

options = webdriver.ChromeOptions()
options.add_extension("./extension_2_0_0_0.crx")
driver = webdriver.Chrome(executable_path=CHROME_PATH, desired_capabilities=capabilities, chrome_options=options)

答案 2 :(得分:1)

我找不到任何适用于chrome的解决方案。我们无法使用headless选项添加扩展名。 我在chrome-buildpack上使用Heroku。有以下选项

  1. 使用xvfb代替无头选项并安装扩展程序
  2. 使用本地代理转发器将流量转发到经过身份验证的代理;我们可以使用Squid,mitProxy或类似proxy-login-automator
  3. 的东西

我改用了Firefox,可以在Proxy身份验证弹出窗口中填写用户名和密码,而不是这些解决方法。像下面给出的。以下代码适用于使用Capybara的Ruby。您应该可以在自己的平台上执行类似的操作


page.driver.browser.switch_to.alert.send_keys('proxy-username' + Selenium::WebDriver::Keys::KEYS[:tab] + 'my-password')
page.driver.browser.switch_to.alert.accept

答案 3 :(得分:0)

我花了很多时间做同样的事情。

Chrome仅使用安装它的操作系统的代理。您可以转到选项 - &gt;进行检查。 find:proxy - &gt;更改代理设置

因此,如果没有额外的插件并配置此插件,则无法执行此操作。

或者您可以更改操作系统代理设置 - 这更容易。

你也可以使用phantomjs - 它有与chrome相同的引擎(WebKit)。 使用这样的东西:

String PROXY = proxyIP + ":" + proxyPort;
String proxyAuth= proxyUser + ":" + proxyPass;
        OpenQA.Selenium.Proxy proxy = new OpenQA.Selenium.Proxy();
                    proxy.HttpProxy = PROXY;
                    proxy.FtpProxy = PROXY;
                    proxy.SslProxy = PROXY;
                    proxy.SocksProxy = PROXY;

    var serviceJS = PhantomJSDriverService.CreateDefaultService(phantomPath);
    serviceJS.AddArguments("--proxy=" + PROXY, "--proxy-type=http", "--proxy-auth=" + proxyAuth);

答案 4 :(得分:0)

这是一个临时解决方案可能在初始状态下工作: 代码在Python中: 首先从chrome插件商店下载插件:Proxy-Auto-Auth_v2.0.crx

        options = webdriver.ChromeOptions()
        options.add_extension("./Proxy-Auto-Auth_v2.0.crx")) #this will provide you a window to enter user name and proxy 
        driver = webdriver.Remote(command_executor=selenium_server,desired_capabilities=options.to_capabilities())

        or 

        driver = webdriver.Chrome(chrome_options=options)

答案 5 :(得分:0)

要在python硒中与auth一起使用代理,可以使用seleniumwire

首先,用pip install selenium-wire

安装

然后从seleniumwire代替selenium导入Webdriver

from seleniumwire import webdriver
options = {
    'proxy': {
        'http': 'http://username:password@host:port', 
        'https': 'https://username:password@host:port',
        'no_proxy': 'localhost,127.0.0.1' # excludes
    }
}
browser = webdriver.Chrome(path_to_driver, seleniumwire_options=options)

现在,您可以使用与硒完全相同的浏览器实例:browser.get('https://api.ipify.org'),依此类推...

答案 6 :(得分:0)

This是我找到的最佳解决方案,并且是唯一可行的解​​决方案-有关此问题的所有其他答案均已过时。它基本上可以为Chrome即时生成auth扩展。只需使用脚本中定义的函数,如下所示:

driver = proxy_chrome(host, port, username, password)
driver.get("http://www.icanhazip.com/")
driver.get("https://www.reddit.com/")
print('Terminated without issues.')

请注意,这不适用于--headless选项。但是,在Linux上,您可以简单地使用x虚拟帧缓冲区进行模拟。就像在python中一样简单:

import xvfbwrapper
x = xvfbwrapper.Xvfb()
x.start()