How to set proxy authentication (user & password) using Python + Selenium

后端 未结 4 390
栀梦
栀梦 2020-11-30 07:52

I am using Firefox WebDriver in Python 2.7 with Selenium. My python program starts Firefox browser and visits different websites when I run the program. But, I need to set t

相关标签:
4条回答
  • 2020-11-30 08:28

    In addition to running Firefox with a profile which has the credentials saved. You can do it loading an extension that writes in the loginTextbox and password1Textbox of chrome://global/content/commonDialog.xul (the alert window).

    There are already some extensions that will do the job. For instance: Close Proxy Authentication

    https://addons.mozilla.org/firefox/downloads/latest/close-proxy-authentication/addon-427702-latest.xpi

    from selenium import webdriver
    from base64 import b64encode
    
    proxy = {'host': HOST, 'port': PORT, 'usr': USER, 'pwd': PASSWD}
    
    fp = webdriver.FirefoxProfile()
    
    fp.add_extension('closeproxy.xpi')
    fp.set_preference('network.proxy.type', 1)
    fp.set_preference('network.proxy.http', proxy['host'])
    fp.set_preference('network.proxy.http_port', int(proxy['port']))
    # ... ssl, socks, ftp ...
    fp.set_preference('network.proxy.no_proxies_on', 'localhost, 127.0.0.1')
    
    credentials = '{usr}:{pwd}'.format(**proxy)
    credentials = b64encode(credentials.encode('ascii')).decode('utf-8')
    fp.set_preference('extensions.closeproxyauth.authtoken', credentials)
    
    driver = webdriver.Firefox(fp)
    
    0 讨论(0)
  • 2020-11-30 08:28

    There is an example for Firefox + Python but without the authentication here. Then you can find other available parameters here in source code. So it looks like you need the following:

    socksUsername
    socksPassword
    

    For example:

    from selenium import webdriver
    from selenium.webdriver.common.proxy import *
    
    myProxy = "host:8080"
    
    proxy = Proxy({
        'proxyType': ProxyType.MANUAL,
        'httpProxy': myProxy, # set this value as desired
        'ftpProxy': myProxy,  # set this value as desired
        'sslProxy': myProxy,  # set this value as desired
        'noProxy': ''         # set this value as desired
        'socksUsername': = ''
        'socksPassword': = ''
        })
    
    driver = webdriver.Firefox(proxy=proxy)
    

    or with preferences:

    driverPref = webdriver.FirefoxProfile()
    driverPref.set_preference("network.proxy.type", 1)
    .
    .
    .
    driverPref.set_preference('network.proxy.socks', proxyHost)
    driverPref.set_preference('network.proxy.socks_port', proxyPort)
    driverPref.update_preferences()
    
    driver = webdriver.Firefox(firefox_profile=driverPref)
    

    EDIT:

    I looked at it again and it seems that it is impossible to set authentication details in FF, even manually. The only way is just to remember the details that you have already entered which done by 2 parameters:

    signon.autologin.proxy=true
    network.websocket.enabled=false
    

    that can be configured with the set_preference() method. You can also manually view all FF options by browsing to about:config.

    0 讨论(0)
  • 2020-11-30 08:32

    In an addition to the answer with extension.

    You can also use form filling to dynamically change credentials on your proxy. Just load the extension page, fill the form automatically and click save!

    0 讨论(0)
  • 2020-11-30 08:34

    Dup of: How to set proxy AUTHENTICATION username:password using Python/Selenium

    Selenium-wire: https://github.com/wkeeling/selenium-wire

    Install selenium-wire

    pip install selenium-wire
    

    Import it

    from seleniumwire import webdriver
    

    Auth to proxy

    options = {
    'proxy': {
        'http': 'http://username:password@host:port',
        'https': 'https://username:password@host:port',
        'no_proxy': 'localhost,127.0.0.1,dev_server:8080'
        }
    }
    driver = webdriver.Firefox(seleniumwire_options=options)
    

    Warning
    Take a look to the selenium-wire cache folder. I had a problem because it take all my disk space. You have to remove it sometimes in your script when you want.

    0 讨论(0)
提交回复
热议问题