溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊(cè)×
其他方式登錄
點(diǎn)擊 登錄注冊(cè) 即表示同意《億速云用戶(hù)服務(wù)條款》

Selenium + Firefox怎么用帶用戶(hù)名密碼認(rèn)證的HTTP代理

發(fā)布時(shí)間:2021-12-18 11:03:24 來(lái)源:億速云 閱讀:611 作者:小新 欄目:開(kāi)發(fā)技術(shù)

小編給大家分享一下Selenium + Firefox怎么用帶用戶(hù)名密碼認(rèn)證的HTTP代理,相信大部分人都還不怎么了解,因此分享這篇文章給大家參考一下,希望大家閱讀完這篇文章后大有收獲,下面讓我們一起去了解一下吧!

熟悉Firefox的同學(xué)都知道,F(xiàn)irefox在配置HTTP代理時(shí)無(wú)法設(shè)置用戶(hù)名和密碼。而收費(fèi)的HTTP代理大多都是需要進(jìn)行用戶(hù)名和密碼認(rèn)證的(有的也支持IP白名單,但前提是你的IP需要固定不變)。這就使得使用Selenium + Firefox進(jìn)行自動(dòng)化操作非常不方便,因?yàn)槊看螁?dòng)一個(gè)新的瀏覽器實(shí)例就會(huì)彈出一個(gè)授權(quán)驗(yàn)證窗口,被要求輸入用戶(hù)名和密碼(如下圖所示),打斷了自動(dòng)化操作流程。

Selenium + Firefox怎么用帶用戶(hù)名密碼認(rèn)證的HTTP代理

另外,F(xiàn)irefox也沒(méi)有提供設(shè)置用戶(hù)名密碼的命令行參數(shù)(PS:phantomjs就有--proxy-auth這樣的參數(shù))。難道真的沒(méi)有解決方法了?

鯤之鵬的技術(shù)人員通過(guò)研究終于找到了一個(gè)有效并且穩(wěn)定的解決方案:

先介紹一個(gè)重要的角色,它的主頁(yè)是 https://addons.mozilla.org/en-US/firefox/addon/close-proxy-authentication/ 。close-proxy-authentication實(shí)現(xiàn)了自動(dòng)完成代理用戶(hù)名密碼認(rèn)證(Proxy Authentication)的功能,它提供了一個(gè)extensions.closeproxyauth.authtoken參數(shù)用來(lái)設(shè)置代理的用戶(hù)名和密碼,其值為經(jīng)過(guò)base64編碼后的用戶(hù)名密碼對(duì)(如下圖所示)。close-proxy-authentication會(huì)使用該值構(gòu)造出"Proxy-Authorization: Basic dGVzdDp0ZXN0"頭發(fā)給代理服務(wù)器,以通過(guò)認(rèn)證,這就是它的工作原理。

Selenium + Firefox怎么用帶用戶(hù)名密碼認(rèn)證的HTTP代理

我們就是要借助這個(gè)插件在Selenium + Firefox時(shí)自動(dòng)完成HTTP代理認(rèn)證,流程是這樣的:

(1)通過(guò)Firefox配置選項(xiàng)動(dòng)態(tài)添加close-proxy-authentication這個(gè)插件(默認(rèn)不加載任何插件);

(2)通過(guò)配置選項(xiàng)設(shè)置HTTP代理的IP和端口參數(shù);

(3)設(shè)置extensions.closeproxyauth.authtoken的值為base64encode("用戶(hù)名:密碼");

(4)后續(xù)訪問(wèn)網(wǎng)站的時(shí)候close-proxy-authentication插件將自動(dòng)完成代理的授權(quán)驗(yàn)證過(guò)程,不會(huì)再?gòu)棾稣J(rèn)證窗口;

下面是完整的測(cè)試代碼:

view plain copy to clipboard print ?

  1. # coding: utf-8  

  2. # selenium_firefox_proxy_auto_auth.py  

  3.   

  4. import sys  

  5. import time  

  6. from base64 import b64encode  

  7. from selenium import webdriver  

  8.   

  9.   

  10. # close-proxy-authentication插件的路徑  

  11. # https://addons.mozilla.org/en-US/firefox/addon/close-proxy-authentication/  

  12. PROXY_HELPER_DIR = 'close_proxy_authentication-1.1.xpi'  

  13.   

  14. def test():  

  15.     # HTTP(S)類(lèi)型代理參數(shù)  

  16.     proxy_host = '221.229.204.91'  

  17.     proxy_port = 8888  

  18.     proxy_username = '******'  

  19.     proxy_password = '******'  

  20.       

  21.     fp = webdriver.FirefoxProfile()  

  22.     # 添加代理認(rèn)證插件  

  23.     fp.add_extension(PROXY_HELPER_DIR)  

  24.     # 設(shè)置代理參數(shù)  

  25.     fp.set_preference('network.proxy.type', 1)  

  26.     fp.set_preference('network.proxy.http', proxy_host)  

  27.     fp.set_preference('network.proxy.http_port', proxy_port)  

  28.     # 給close-proxy-authentication插件設(shè)置authtoken(即代理認(rèn)證的用戶(hù)名和密碼)  

  29.     credentials = '{}:{}'.format(proxy_username, proxy_password)  

  30.     credentials = b64encode(credentials)  

  31.     fp.set_preference('extensions.closeproxyauth.authtoken', credentials)                  

  32.   

  33.     firefox = webdriver.Firefox(firefox_profile=fp)  

  34.     # 訪問(wèn)http://httpbin.org/ip回顯當(dāng)前IP  

  35.     firefox.get('http://httpbin.org/ip')  

  36.     time.sleep(1000)  

  37.       

  38. if __name__ == '__main__':  

  39.     test()  

測(cè)試環(huán)境:

view plain copy to clipboard print ?

  1. Firefox V53.0  

  2. geckodriver v0.18.0  

  3. selenium V3.8.0  

  4. close-proxy-authentication V1.1  

上述環(huán)境涉及文件打包下載地址: http://pan.webscraping.cn:8000/index.php/s/PMDjc77gbCFJzpO

需要特別注意的是:

(1)close-proxy-authentication的最新版本目前是V1.1,它并不兼容最新版的Firefox,鯤之鵬的技術(shù)人員測(cè)試發(fā)現(xiàn)Firefox V56.0以下版本能夠兼容close-proxy-authentication V1.1。

(2)不同geckodriver(Firefox的webdriver程序)版本,支持的Firefox版本也不相同,具體支持哪些版本,在geckodriver的releases頁(yè)面上有說(shuō)明。

測(cè)試結(jié)果如下圖所示。沒(méi)有再?gòu)棾稣J(rèn)證窗口,訪問(wèn)httpbin.org/ip直接回顯了HTTP代理的IP:

Selenium + Firefox怎么用帶用戶(hù)名密碼認(rèn)證的HTTP代理

以上是“Selenium + Firefox怎么用帶用戶(hù)名密碼認(rèn)證的HTTP代理”這篇文章的所有內(nèi)容,感謝各位的閱讀!相信大家都有了一定的了解,希望分享的內(nèi)容對(duì)大家有所幫助,如果還想學(xué)習(xí)更多知識(shí),歡迎關(guān)注億速云行業(yè)資訊頻道!

向AI問(wèn)一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長(zhǎng)郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI