爬蟲:Selenium Wire + 私人匿名代理

Gary Liao
Jun 3, 2021

--

本文私人匿名代理服務以Bright Data為範例

以前我寫爬蟲喜歡直接拿Requests就開始做了,縱使藏了一堆cookies我還是有辦法順藤摸瓜,寫出一隻輕量的好爬蟲,搭配私人匿名代理簡直無往不利,沒人認得出我;但就在爬好爬滿之後,覺得人生何必這麼累,我沒有阿姨,但我也不想努力了,於是開始寫Selenium爬蟲,人生似乎輕鬆很多;最後要接上我最常用的私人匿名代理時,問題來了:為何沒有效!?

在網路上找了很久,似乎找到原因了:

No authentication methods are supported for SOCKSv5 in Chrome (although some do exist for the protocol).

簡單的說,私人匿名代理通常需要帳號密碼登入,因此我不能在循往例在proxy 裡面插入帳號密碼就蒙混過關了,雖然在Stack Overflow找到一個變通的解法,但太繞了。

最後我找到一個簡單好用的方法:使用Selenium Wire。根據官網的說法,Selenium Wire就是一個可以讓你做更多細節操作的Selenium,使用上,只要一開始宣告driver前替換package就可以了:

# from selenium import webdriver
from seleniumwire import webdriver
# 替換成seleniumwire之後,一如往常宣告driver
driver = webdriver.Chrome()

接著重頭戲來了,接上我的私有匿名代理

options = {
'proxy': {
'http' : 'http://username:password@proxy_ip:proxy_port',
'https': 'https://username:password@proxy_ip:proxy_port',
'no_proxy': 'localhost,127.0.0.1'
}
}
# seleniumwire_options 是原本沒有的參數
driver = webdriver.Chrome(seleniumwire_options=options)

就是這麼簡單。

人生再次美好。

以我自己用的私人匿名代理服務Bright Data 為例,我使用他們的數據中心代理(我在另一篇文章中有介紹這間代理服務的使用心得),每次建立代理通道之後,就可以取得20000個IP自由切換,他會提供一份IP列表下載:

每筆資料格式如下:

[proxy_ip]:[proxy_port]:[username]:[password]

依序填入上面的 seleniumwire_options 之中,在透過httpbin看我的IP,結果如下,httpbin測到的就是代理IP !

至於英數字驗證碼又是另一個故事了。

--

--