【问题标题】:Can not set Luminati proxy on Selenium in Python 3无法在 Python 3 中的 Selenium 上设置 Luminati 代理
【发布时间】:2019-04-12 04:43:58
【问题描述】:

我正在使用 Python 上的 Selenium 为 Firefox 驱动程序设置代理。

我按照以下说明设置代理: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')

但代理似乎不起作用。即使我为代理设置了错误的使用/密码和主机 URL,我也始终可以连接到该站点。

我错过了什么吗?

任何想法都值得赞赏。谢谢!

【问题讨论】:

    标签: python python-3.x selenium proxy


    【解决方案1】:

    我使用 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()
    
    

    你会测试吗?

    【讨论】:

    • 感谢您的回答!根据我的问题,我要求使用 Firefox。在 chrome 中,我没有问题,但在 Firefox 中我做不到
    • 您提供 chromeOptions 的行已被注释掉。我尝试运行此示例(使用我的凭据)并取消注释行 options=options 并且浏览器显示“无互联网连接”。这个例子确实是通过代理访问网页吗?
    【解决方案2】:

    终于自己找到了解决方案,然后在这里推送给需要的兄弟:

    从 geckodriver v0.19.1 开始,他们删除了 socketUsername 和 socketPassword。因此我们不能再使用“http://username-sessionid-:passwords@zproxy.luminati.io:port”了。

    解决方案是:将用户名和密码保存到 Firefox 配置文件并检索它。 或者我们可以在firefox询问时输入密码和用户名,如下所示:

    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")
    

    【讨论】:

      猜你喜欢
      • 2019-01-19
      • 2020-01-21
      • 2021-10-10
      • 1970-01-01
      • 2018-11-22
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-02-07
      相关资源
      最近更新 更多