[英]Can not set Luminati proxy on Selenium in Python 3
I am setting up proxy for Firefox driver with Selenium on Python. 我正在Python上使用Selenium设置Firefox驱动程序的代理。
I followed this instruction to setup the proxy: https://github.com/luminati-io/api/blob/master/python/3.x/simple.py 我按照以下说明设置了代理: https : //github.com/luminati-io/api/blob/master/python/3.x/simple.py
username = 'lum-customer-CUSTOMER-zone-YOURZONE'
password = 'YOURPASS'
port = 22225
session_id = random.random()
super_proxy_url = ('http://%s-session-%s:%s@zproxy.luminati.io:%d' %
(username, session_id, password, port))
proxy = Proxy({
'proxyType': ProxyType.MANUAL,
'httpProxy': super_proxy_url,
'ftpProxy': super_proxy_url,
'sslProxy': super_proxy_url,
'noProxy': '' # set this value as desired
})
print(proxy)
driver = webdriver.Firefox(executable_path = "./bin/geckodriver", proxy=proxy)
driver.get('https://www.google.com')
But it 's seem that the proxy is not work. 但是似乎代理不起作用。 I am always can connect to the site even if I setup a wrong use/password and host url for the proxy. 即使我为代理设置了错误的使用/密码和主机网址,我也始终可以连接到该站点。
Did I missed something? 我错过了什么吗?
Any idea is appreciate. 任何想法都值得赞赏。 Thanks! 谢谢!
I use chrome and get success. 我使用chrome并获得成功。
import random
import time
from selenium import webdriver
from selenium.webdriver.common.proxy import ProxyType, Proxy
username = 'x'
password = 'x'
port = 22225
session_id = random.random()
super_proxy_url = ('http://%s-session-%s:%s@zproxy.luminati.io:%d' %
(username, session_id, password, port))
proxy = Proxy({
'proxyType': ProxyType.MANUAL,
'httpProxy': super_proxy_url,
'ftpProxy': super_proxy_url,
'sslProxy': super_proxy_url,
'noProxy': '' # set this value as desired
})
print(proxy)
# driver = webdriver.Chrome(executable_path="./bin/geckodriver", proxy=proxy)
options = webdriver.ChromeOptions()
options.add_argument('--proxy-server=%s' % proxy)
driver = webdriver.Chrome(
executable_path='/Users/youjunliang/PycharmProjects/chromedriver',
# options=options
)
# driver.get('https://www.google.com')
driver.get('https://www.amazon.com')
time.sleep(2)
driver.quit()
Can you test? 你可以测试吗?
Finally, I found the solution by myself, then I push it here for brothers who need it: 最后,我自己找到了解决方案,然后将其推送给需要它的兄弟:
From geckodriver v0.19.1, they remove socketUsername and socketPassword. 他们从geckodriver v0.19.1中删除了socketUsername和socketPassword。 Therefore we can not use " http://username-sessionid-:passwords@zproxy.luminati.io:port " anymore. 因此,我们不能再使用“ http:// username-sessionid-:passwords@zproxy.luminati.io:port ”。
Solution are: save username and password to firefox profile and retrieve it. 解决方法是:将用户名和密码保存到firefox配置文件中并进行检索。 Or we can enter password and username when firefox ask it as bellow: 或者,当firefox要求以下信息时,我们可以输入密码和用户名:
class SeleniumWebDriver: SeleniumWebDriver类:
# Set proxy url and proxy port via proxy_url
def get_proxy_cabability(proxy_url):
desired_capability = webdriver.DesiredCapabilities.FIREFOX
desired_capability['proxy'] = {
"proxyType": "manual",
"httpProxy": proxy_url,
"ftpProxy": proxy_url,
"sslProxy": proxy_url,
"socksVersion": 4
}
return desired_capability
#get driver
def get_driver(proxy_url):
desired_capability = self.get_proxy_cabability(proxy_url)
driver = webdriver.Firefox(capabilities=desired_capability, log_path=log_path)
return driver
def set_auth_proxy(username, password):
try:
# Force driver show authentication dialog
self.driver.get('http://www.google.com/')
# Waiting for alert
WebDriverWait(self.driver, 20).until(
ec.alert_is_present())
alert = self.driver.switch_to_alert()
# send auth information
alert.send_keys(username + Keys.TAB + password)
time.sleep(3)
alert.accept()
except Exception as e:
raise Exception("Can not authenticate proxy server")
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.