米撲代理,全球領(lǐng)導(dǎo)的代理品牌,專(zhuān)注代理行業(yè)近十年,提供開(kāi)放、私密、獨(dú)享代理,并可免費(fèi)試用
米撲代理官網(wǎng):https://proxy.mimvp.com
本文示例,是結(jié)合米撲代理的私密、獨(dú)享、開(kāi)放代理,專(zhuān)門(mén)研發(fā)的示例,
支持 http、https的無(wú)密碼、白名單ip、密碼授權(quán)三種類(lèi)型
本文轉(zhuǎn)自米撲博客:Python + Selenium + Firefox 使用代理 auth 的用戶(hù)名密碼授權(quán)
示例中,用的插件 xpi 請(qǐng)到米撲代理官網(wǎng),或米撲官方 github 下載
本文,直接給出完整的代碼,都經(jīng)過(guò)嚴(yán)格驗(yàn)證通過(guò),具體請(qǐng)見(jiàn)注釋
Python + Firefox + 插件(closeproxy.xpi)
其中,closeproxy.xpi文件,需要Google、Bing搜下都能搜到下載地址
完整的測(cè)試代碼如下:
from selenium import webdriver
from selenium.webdriver.firefox.firefox_binary import FirefoxBinary
from selenium.webdriver.common.proxy import *
from pyvirtualdisplay import Display
from base64 import b64encode
proxy = {
"host": "123.57.78.100",
"port": "12345",
"user": "username",
"pass": "password"
}
profile = webdriver.FirefoxProfile()
# add new header
profile.add_extension("modify_headers-0.7.1.1-fx.xpi")
profile.set_preference("extensions.modify_headers.currentVersion", "0.7.1.1-fx")
profile.set_preference("modifyheaders.config.active", True)
profile.set_preference("modifyheaders.headers.count", 1)
profile.set_preference("modifyheaders.headers.action0", "Add")
profile.set_preference("modifyheaders.headers.name0", "Proxy-Switch-Ip")
profile.set_preference("modifyheaders.headers.value0", "yes")
profile.set_preference("modifyheaders.headers.enabled0", True)
# add proxy
profile.set_preference('network.proxy.type', 1)
profile.set_preference('network.proxy.http', proxy['host'])
profile.set_preference('network.proxy.http_port', int(proxy['port']))
profile.set_preference('network.proxy.no_proxies_on', 'localhost, 127.0.0.1')
#profile.set_preference("network.proxy.username", 'aaaaa')
#profile.set_preference("network.proxy.password", 'bbbbb')
# Proxy auto login
profile.add_extension('closeproxy.xpi')
credentials = '{user}:{pass}'.format(**proxy)
credentials = b64encode(credentials.encode('ascii')).decode('utf-8')
profile.set_preference('extensions.closeproxyauth.authtoken', credentials)
profile.update_preferences()
driver = webdriver.Firefox(profile)
driver.get("https://proxy.mimvp.com/ip.php")
print driver.page_source
driver.quit()
米撲代理出品:完整、驗(yàn)證、權(quán)威的示例
#!/usr/bin/env python
# -*- coding:utf-8 -*-
#
# Selenium + Firefox 支持 http、https
#
# 米撲代理示例:
# https://proxy.mimvp.com/demo2.php
#
# 米撲代理購(gòu)買(mǎi):
# https://proxy.mimvp.com
#
# mimvp.com
# 2017-01-08
# Python + Selenium + Firefox 設(shè)置密碼時(shí),需要使用到兩個(gè)插件:
# 插件1: modify_headers-0.7.1.1-fx.xpi
# 下載地址:https://github.com/mimvp/mimvp-proxy-demo
#
# 方式2: close_proxy_authentication-1.1.xpi
# 下載地址:https://github.com/mimvp/mimvp-proxy-demo
#
# 本示例由米撲代理原創(chuàng),測(cè)試代理來(lái)自于米撲代理
# 密碼授權(quán)和白名單ip設(shè)置,請(qǐng)見(jiàn)米撲代理 - 會(huì)員中心:https://proxy.mimvp.com/usercenter/userinfo.php?p=whiteip
from selenium import webdriver
from selenium.webdriver.firefox.firefox_binary import FirefoxBinary
from selenium.webdriver.common.proxy import *
from pyvirtualdisplay import Display
# from xvfbwrapper import Xvfb
import bs4, os
from base64 import b64encode
import sys
reload(sys)
sys.setdefaultencoding('utf8')
## webdriver + firefox (不使用代理,爬取網(wǎng)頁(yè))
def spider_url_firefox(url):
browser = None
display = None
try:
display = Display(visible=0, size=(800, 600))
display.start()
browser = webdriver.Firefox() # 打開(kāi) FireFox 瀏覽器
browser.get(url)
content = browser.page_source
print("content: " + str(content))
finally:
if browser: browser.quit()
if display: display.stop()
## webdriver + firefox + proxy + whiteip (無(wú)密碼,或白名單ip授權(quán))
## 米撲代理:https://proxy.mimvp.com
def spider_url_firefox_by_whiteip(url):
browser = None
display = None
## 白名單ip,請(qǐng)見(jiàn)米撲代理會(huì)員中心: 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']) # 訪(fǎng)問(wèn)http網(wǎng)站
elif url.startswith("https://"):
profile.set_preference('network.proxy.ssl', mimvp_proxy['ip'])
profile.set_preference('network.proxy.ssl_port', mimvp_proxy['port_https']) # 訪(fǎng)問(wèn)https網(wǎng)站
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')
## 不存在此用法,不能這么設(shè)置用戶(hù)名密碼 (舍棄)
# profile.set_preference("network.proxy.username", 'mimvp-guest')
# profile.set_preference("network.proxy.password", 'welcome2mimvp')
profile.update_preferences()
browser = webdriver.Firefox(profile) # 打開(kāi) FireFox 瀏覽器
browser.get(url)
content = browser.page_source
print("content: " + str(content))
finally:
if browser: browser.quit()
if display: display.stop()
## webdriver + firefox + proxy + https (https密碼授權(quán))
## 米撲代理:https://proxy.mimvp.com
def spider_url_firefox_by_proxy(url):
browser = None
display = None
## 授權(quán)密碼,請(qǐng)見(jiàn)米撲代理會(huì)員中心: 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 new header
profile.add_extension("modify_headers-0.7.1.1-fx.xpi")
profile.set_preference("extensions.modify_headers.currentVersion", "0.7.1.1-fx")
profile.set_preference("modifyheaders.config.active", True)
profile.set_preference("modifyheaders.headers.count", 1)
profile.set_preference("modifyheaders.headers.action0", "Add")
profile.set_preference("modifyheaders.headers.name0", "Proxy-Switch-Ip")
profile.set_preference("modifyheaders.headers.value0", "yes")
profile.set_preference("modifyheaders.headers.enabled0", True)
# 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']) # 訪(fǎng)問(wèn)http網(wǎng)站
elif url.startswith("https://"):
profile.set_preference('network.proxy.ssl', mimvp_proxy['ip'])
profile.set_preference('network.proxy.ssl_port', mimvp_proxy['port_https']) # 訪(fǎng)問(wèn)https網(wǎng)站
# Proxy auto login (自動(dòng)填寫(xiě)密碼,進(jìn)行代理授權(quán))
profile.add_extension('close_proxy_authentication-1.1.xpi')
credentials = '{username}:{password}'.format(username=mimvp_proxy['username'], password=mimvp_proxy['password']) # auth
credentials = b64encode(credentials.encode('ascii')).decode('utf-8')
profile.set_preference('extensions.closeproxyauth.authtoken', credentials)
profile.update_preferences()
browser = webdriver.Firefox(profile) # 打開(kāi) FireFox 瀏覽器
browser.get(url)
content = browser.page_source
print("content: " + str(content))
finally:
if browser: browser.quit()
if display: display.stop()
## webdriver + firefox + proxy + socks (socks密碼授權(quán))
## 米撲代理:https://proxy.mimvp.com
def spider_url_firefox_by_socks(url):
browser = None
display = None
## 授權(quán)密碼,請(qǐng)見(jiàn)米撲代理會(huì)員中心: 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'
}
proxy_config = Proxy({
'proxyType' : ProxyType.MANUAL, # 1
'httpProxy' : mimvp_proxy['ip'] + ":" + str(mimvp_proxy['port_https']),
'sslProxy' : mimvp_proxy['ip'] + ":" + str(mimvp_proxy['port_https']),
'socksProxy' : mimvp_proxy['ip'] + ":" + str(mimvp_proxy['port_socks']),
'ftpProxy' : mimvp_proxy['ip'] + ":" + str(mimvp_proxy['port_https']),
'noProxy' : 'localhost,127.0.0.1',
'socksUsername' : mimvp_proxy['username'],
'socksPassword' : mimvp_proxy['password'],
})
try:
display = Display(visible=0, size=(800, 600))
display.start()
profile = webdriver.FirefoxProfile()
# add new header
profile.add_extension("modify_headers-0.7.1.1-fx.xpi")
profile.set_preference("extensions.modify_headers.currentVersion", "0.7.1.1-fx")
profile.set_preference("modifyheaders.config.active", True)
profile.set_preference("modifyheaders.headers.count", 1)
profile.set_preference("modifyheaders.headers.action0", "Add")
profile.set_preference("modifyheaders.headers.name0", "Proxy-Switch-Ip")
profile.set_preference("modifyheaders.headers.value0", "yes")
profile.set_preference("modifyheaders.headers.enabled0", True)
# auto save auth
profile.set_preference("signon.autologin.proxy", 'true')
profile.set_preference("network.websocket.enabled", 'false')
profile.set_preference('network.proxy.share_proxy_settings', 'false')
profile.set_preference('network.automatic-ntlm-auth.allow-proxies', 'false')
profile.set_preference('network.auth.use-sspi', 'false')
profile.update_preferences()
browser = webdriver.Firefox(proxy=proxy_config, firefox_profile=profile) # 打開(kāi) FireFox 瀏覽器
browser.get(url)
content = browser.page_source
print("content: " + str(content))
finally:
if browser: browser.quit()
if display: display.stop()
if __name__ == '__main__':
url = 'https://ip.cn'
url = 'https://mimvp.com'
url = 'https://proxy.mimvp.com/ip.php'
# 不使用代理,爬取網(wǎng)頁(yè),成功
spider_url_firefox(url)
# 代理無(wú)密碼,或設(shè)置白名單ip,成功
spider_url_firefox_by_whiteip(url)
# http, https 密碼授權(quán),成功
spider_url_firefox_by_proxy(url)
# socks5 密碼授權(quán),失敗 (仍然是本機(jī)ip請(qǐng)求的,不是代理ip請(qǐng)求)
spider_url_firefox_by_socks(url)