我们尝试了几天在Python中使用selenium chromedriver设置代理认证。我们无法设置ip,因为Chrome会弹出一个认证窗口。问题是selenium无法切换到那个窗口,因此无法输入。唯一对我们有效的解决方案是使用pyautogui,这对我们来说是一个糟糕的解决方案,因为我们想使用headless函数。
以下是我们尝试过的所有方法:
driver.switch_to_window()
driver.switch_to_active_element()
driver.switch_to_alert()
ActionChains(driver).send_keys("test").perform()
driver.switch_to_alert()
options = webdriver.ChromeOptions()
options.add_argument('--proxy-server=http://user:pass@3.223.68.195:31112')
driver.get("https://user:pass@google.com")
proxy = {'address': '3.209.253.119:31112',
'username': 'user',
'password': 'pass'}
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}
capabilities['proxy']['socksUsername'] = proxy['username']
capabilities['proxy']['socksPassword'] = proxy['password']
driver = webdriver.Chrome(executable_path="chromedriver.exe", desired_capabilities=capabilities)
driver.get("http://google.com")
任何帮助都将非常感谢:)
2条答案
按热度按时间z8dt9xmd1#
如果你需要在python中使用一个没有认证的代理(没有用户名和密码),在chromedriver中使用Selenium库,你通常使用下面的代码:
它工作正常,除非代理要求认证。如果代理要求您登录时输入用户名和密码,它将不工作。在这种情况下,您必须使用更棘手的解决方案,解释如下。
要设置代理认证,我们将生成一个文件,并使用下面的代码动态地将其上传到chromedriver。这有效地创建了一个chrome扩展。此代码将selenium与chromedriver配置为使用需要用户/密码对认证的HTTP代理。
函数
get_chromedriver
返回已配置的selenium web驱动程序,您可以在应用程序中使用。此代码经过测试,工作正常。要在你自己的代码中实现这一点,只需调用函数
create_chromedriver
,参数为host,port,user,pass和user-agent。如果你不想使用代理或user-agent,只需相应地编辑get_chromedriver
,使参数为false。6l7fqoea2#
@luke-hamilton您可以通过如下扩展配置一个经过验证的代理,如果包含此选项,则可以无头运行