环境是Python 2.7.6 + Selenium 2.47

本文所有的示例,基于米扑代理的高可用代理进行的测试、验证

如需高稳定、高可用的代理,请去米扑代理官网免费申请试用

米扑代理官网:https://proxy.mimvp.com

 

方法一

from selenium import webdriver

profile = webdriver.FirefoxProfile()
profile.set_preference('network.proxy.type', 1)
profile.set_preference('network.proxy.http', '120.52.73.27')
profile.set_preference('network.proxy.http_port', 3128)
profile.set_preference('network.proxy.ssl', '120.52.73.27')
profile.set_preference('network.proxy.ssl_port', 3128)
profile.set_preference('network.proxy.socks', '120.52.73.27')
profile.set_preference('network.proxy.socks_port', port)
profile.set_preference('network.proxy.ftp', '120.52.73.27')
profile.set_preference('network.proxy.ftp_port', port)
profile.update_preferences()
driver = webdriver.Firefox(profile)

 

简单设置代理方法测试成功

webdriver-configure-firefox-proxy-server-02

这些坑分别是:

有些地方只告诉你配置 network.proxy.http 和 network.proxy.http_port,这种协议只适合访问 http 网站,但访问 https 网站会失败!

但是如果不设置network.proxy.type,一切都是浮云

这个配置是个整数,默认是0,就是直接连接;1就是手工配置代理。

webdriver-configure-firefox-proxy-server
profile.set_preference(‘network.proxy.type’, 1)       // 手动配置使用代理

那个端口号3128是整数

profile.set_preference(‘network.proxy.http’, '120.52.73.27')
profile.set_preference(‘network.proxy.http_port’, 3128)

 

但是,如果有些资源是https的,是需要另外配置 network.proxy.ssl 和 network.proxy.ssl_port,可以访问 https 网站

set完以后,是需要update_preferences的

profile.update_preferences()

 

最后,给出完整的配置代码(代码无需密码授权

## webdriver + firefox + proxy + whiteip (无密码,或白名单ip授权)
## 米扑代理:https://proxy.mimvp.com
def spider_url_firefox_by_whiteip(url):
    browser = None
    display = None
    
    ## 白名单ip,请见米扑代理会员中心: https://proxy.mimvp.com/usercenter/userinfo.php?p=whiteip
    mimvp_proxy = { 
                    'ip'            : '140.143.62.84',      # ip
                    'port_https'    : 19480,                # http, https
                    'port_socks'    : 19481,                # socks5
                    'username'      : 'mimvp-user',
                    'password'      : 'mimvp-pass'
                  }
    
    try:
        display = Display(visible=0, size=(800, 600))
        display.start()
        
        profile = webdriver.FirefoxProfile()
        
        # add proxy
        profile.set_preference('network.proxy.type', 1)     # ProxyType.MANUAL = 1
        if url.startswith("http://"):
            profile.set_preference('network.proxy.http', mimvp_proxy['ip'])
            profile.set_preference('network.proxy.http_port', mimvp_proxy['port_https'])    # 访问http网站
        elif url.startswith("https://"):
            profile.set_preference('network.proxy.ssl', mimvp_proxy['ip'])
            profile.set_preference('network.proxy.ssl_port', mimvp_proxy['port_https'])     # 访问https网站
        else:
            profile.set_preference('network.proxy.socks', mimvp_proxy['ip'])
            profile.set_preference('network.proxy.socks_port', mimvp_proxy['port_socks'])
            profile.set_preference('network.proxy.ftp', mimvp_proxy['ip'])
            profile.set_preference('network.proxy.ftp_port', mimvp_proxy['port_https'])
            profile.set_preference('network.proxy.no_proxies_on', 'localhost,127.0.0.1')
        
        ## 不存在此用法,不能这么设置用户名密码 (舍弃)
#         profile.set_preference("network.proxy.username", 'mimvp-guest')
#         profile.set_preference("network.proxy.password", 'welcome2mimvp')
    
        profile.update_preferences()
        
        browser = webdriver.Firefox(profile)       # 打开 FireFox 浏览器
        browser.get(url)     
        content = browser.page_source
        print("content: " + str(content))
    finally:
        if browser: browser.quit()
        if display: display.stop()

更多完整的代码、需要密码授权的代码示例,请参考:米扑代理官网

米扑代理 - 代理示例:https://proxy.mimvp.com/demo.php

 

最后,贴一个完整的Firefox配置参数表:

http://kb.mozillazine.org/Firefox_:_FAQs_:_About:config_Entries

 

如果发现自己的配置好像没有生效,那么在webdriver启动的Firefox里面输入:about:config

然后对着上面那个配置参数表来看。总会发现掉哪个坑的。

 

方法二

from selenium import webdriver
from selenium.webdriver.common.proxy import *

myProxy = "120.52.73.27:8081"
proxy = Proxy({
				'proxyType': ProxyType.MANUAL,
				'httpProxy': myProxy,
				'sslProxy': myProxy,
				'ftpProxy': myProxy,
				'noProxy':''})

driver = webdriver.Firefox(proxy=proxy)
driver.set_page_load_timeout(30)
driver.get('https://proxy.mimvp.com')

 

方法三

from selenium import webdriver

PROXY = "120.52.73.27:8081" # IP:PORT or HOST:PORT

chrome_options = webdriver.ChromeOptions()
chrome_options.add_argument('--proxy-server=http://%s' % PROXY)

chrome = webdriver.Chrome(chrome_options=chrome_options)
chrome.get("https://proxy.mimvp.com")

 

 

参考推荐:

Python + Selenium + Firefox 使用代理 auth 的用户名密码授权

Selenium FF WebDriver 加载firebug 和设置代理

Selenium Webdriver 以代理proxy方式启动firefox,ie,chrome

how do i set proxy for chrome in python webdriver