Selenium Webdriver 3.X源碼分析之Proxy.py代理能力
- 2019 年 10 月 7 日
- 筆記
在使用selenium webdriver測試或進行爬蟲動作時,如果未在目標服務的白名單內,隨著爬取的頻率增多會被禁止訪問目標服務。
又或者目標服務的反爬蟲策略相對完善的情況下,也是很容易將selenium的爬取給禁止。
又或者採用分散式selenium爬取方式時,也會很容易的被禁止爬取。
所以這個時候我們就需要代理服務,來規避一些反爬蟲策略等,下面我們看下在selenium webdriver Python端由哪個模組提供了對應的代理功能:

通過查看源碼的成員結構,如下圖所示:

在proxy.py中提供了http代理、ftp代理、sock代理、ssl代理等能力,基本滿足了我們日常的需要。
下面我們看一個基本的Python實例程式碼,看下如何在程式碼中使用代理。
# 獲取到瀏覽器對應的配置對象
# 如果為chrome瀏覽器則為 profile=webdriver.ChromeOptions()
# 其他瀏覽器類似
profile=webdriver.FirefoxOptions()
# 設置為headless模式
profile.add_argument('-headless') #設置無頭模式
#設置代理伺服器類型,類型參見下文的注部分說明
profile.set_preference('network.proxy.type', 1)
# IP為你的代理伺服器地址:如『127.0.0.0』,字元串類型
profile.set_preference('network.proxy.http',IP)
#PORT為代理伺服器埠號:如,9999,整數類型
profile.set_preference('network.proxy.http_port', PORT)
# 載入配置
browser=webdriver.Firefox(options=profile)
注,代理伺服器類型,參加proxy.py源碼中的定義,如下

即:
- 0 – 直連,不需要代理
- 1 – 手動設置代理
- 2 – 從url自動配置代理
- 3 – 不用
- 4 – 自動化偵測代理配置資訊
- 5 – 使用系統代理
- 6 – 內部使用,不需要調用
所以一般不直接使用proxy.py模組定義的能力,而是通過設置對應的瀏覽器Options來達成使用代理的功能。
在proxy.py中定義了三個類,如下圖所示:

Proxy:具體實現了各種代理
ProxyType:定義了代理類型
ProxyTypeFactory: 定義了代理類型模式
各類的具體程式碼這裡不一一說明了,應該講源碼是很簡潔的了,建議深入掌握的人員多看看就好了