您好,登錄后才能下訂單哦!
小編給大家分享一下Selenium + Firefox怎么用帶用戶名密碼認證的HTTP代理,相信大部分人都還不怎么了解,因此分享這篇文章給大家參考一下,希望大家閱讀完這篇文章后大有收獲,下面讓我們一起去了解一下吧!
熟悉Firefox的同學都知道,Firefox在配置HTTP代理時無法設置用戶名和密碼。而收費的HTTP代理大多都是需要進行用戶名和密碼認證的(有的也支持IP白名單,但前提是你的IP需要固定不變)。這就使得使用Selenium + Firefox進行自動化操作非常不方便,因為每次啟動一個新的瀏覽器實例就會彈出一個授權驗證窗口,被要求輸入用戶名和密碼(如下圖所示),打斷了自動化操作流程。
另外,Firefox也沒有提供設置用戶名密碼的命令行參數(PS:phantomjs就有--proxy-auth這樣的參數)。難道真的沒有解決方法了?
鯤之鵬的技術人員通過研究終于找到了一個有效并且穩定的解決方案:
先介紹一個重要的角色,它的主頁是 https://addons.mozilla.org/en-US/firefox/addon/close-proxy-authentication/ 。close-proxy-authentication實現了自動完成代理用戶名密碼認證(Proxy Authentication)的功能,它提供了一個extensions.closeproxyauth.authtoken參數用來設置代理的用戶名和密碼,其值為經過base64編碼后的用戶名密碼對(如下圖所示)。close-proxy-authentication會使用該值構造出"Proxy-Authorization: Basic dGVzdDp0ZXN0"頭發給代理服務器,以通過認證,這就是它的工作原理。
我們就是要借助這個插件在Selenium + Firefox時自動完成HTTP代理認證,流程是這樣的:
(1)通過Firefox配置選項動態添加close-proxy-authentication這個插件(默認不加載任何插件);
(2)通過配置選項設置HTTP代理的IP和端口參數;
(3)設置extensions.closeproxyauth.authtoken的值為base64encode("用戶名:密碼");
(4)后續訪問網站的時候close-proxy-authentication插件將自動完成代理的授權驗證過程,不會再彈出認證窗口;
下面是完整的測試代碼:
view plain copy to clipboard print ?
# coding: utf-8
# selenium_firefox_proxy_auto_auth.py
import sys
import time
from base64 import b64encode
from selenium import webdriver
# close-proxy-authentication插件的路徑
# https://addons.mozilla.org/en-US/firefox/addon/close-proxy-authentication/
PROXY_HELPER_DIR = 'close_proxy_authentication-1.1.xpi'
def test():
# HTTP(S)類型代理參數
proxy_host = '221.229.204.91'
proxy_port = 8888
proxy_username = '******'
proxy_password = '******'
fp = webdriver.FirefoxProfile()
# 添加代理認證插件
fp.add_extension(PROXY_HELPER_DIR)
# 設置代理參數
fp.set_preference('network.proxy.type', 1)
fp.set_preference('network.proxy.http', proxy_host)
fp.set_preference('network.proxy.http_port', proxy_port)
# 給close-proxy-authentication插件設置authtoken(即代理認證的用戶名和密碼)
credentials = '{}:{}'.format(proxy_username, proxy_password)
credentials = b64encode(credentials)
fp.set_preference('extensions.closeproxyauth.authtoken', credentials)
firefox = webdriver.Firefox(firefox_profile=fp)
# 訪問http://httpbin.org/ip回顯當前IP
firefox.get('http://httpbin.org/ip')
time.sleep(1000)
if __name__ == '__main__':
test()
測試環境:
view plain copy to clipboard print ?
Firefox V53.0
geckodriver v0.18.0
selenium V3.8.0
close-proxy-authentication V1.1
上述環境涉及文件打包下載地址: http://pan.webscraping.cn:8000/index.php/s/PMDjc77gbCFJzpO
需要特別注意的是:
(1)close-proxy-authentication的最新版本目前是V1.1,它并不兼容最新版的Firefox,鯤之鵬的技術人員測試發現Firefox V56.0以下版本能夠兼容close-proxy-authentication V1.1。
(2)不同geckodriver(Firefox的webdriver程序)版本,支持的Firefox版本也不相同,具體支持哪些版本,在geckodriver的releases頁面上有說明。
測試結果如下圖所示。沒有再彈出認證窗口,訪問httpbin.org/ip直接回顯了HTTP代理的IP:
以上是“Selenium + Firefox怎么用帶用戶名密碼認證的HTTP代理”這篇文章的所有內容,感謝各位的閱讀!相信大家都有了一定的了解,希望分享的內容對大家有所幫助,如果還想學習更多知識,歡迎關注億速云行業資訊頻道!
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。