CentOS7上使用Chrome的無頭瀏覽器
0. 前言
說到Python爬蟲,就一定會涉及到“反爬”策略,就會遇到“爬取動態頁面元素”的問題,如果目標網站沒有其他的反爬措施,那麼“動態元素”就是我們這裡要解決的唯一難題。而解決的方式就是簡單粗暴地想辦法模擬人在瀏覽器上操作,進而觸發相應動態元素的載入,也就指向了強大的Selenium
。
眾所周知,Chrome
是Google家的瀏覽器,在2007年開始推出了自己的無頭模式。而我們曾經熟悉的PhantomJS
卻在之後不再被Selenium
所支援(目前只支援Chrome
和Firefox
的無頭模式,據說這是一種大廠效應23333)。在MacOS
下,坑會少一些,但放在我的伺服器上坑就多了起來。
注:以下配置過程請在非root
使用者賬號下完成。
1. 安裝chrome
1.1 新增repo
源
$ sudo vi /etc/yum.repos.d/google.repo
在開啟的空檔案中填入以下內容
[google] name=Google-x86_64 baseurl=http://dl.google.com/linux/rpm/stable/x86_64 enabled=1 gpgcheck=0 gpgkey=https://dl-ssl.google.com/linux/linux_signing_key.pub
1.2yum
安裝
$ sudo yum update $ sudo yum install google-chrome-stable
2. 安裝chromedriver
2.1 檢視chrome
的版本
$ google-chrome --version
2.2 下載chromedriver
請注意chrome
和chromedriver
的區別,前者是瀏覽器,後者是其驅動,而二者缺一不可。推薦在官網
下載最新的chromedriver
,如果沒有“梯子”,這裡
也有各個版本的chromedriver
,而你要選擇的版本要與你的chrome
版本對應(如ChromeDriver 2.46
支援Chrome v71-73
)。
2.3 新增至環境變數$PATH
$ sudo vim ~/.bash_profile
開啟後在適當的位置新增:
(假設你把chromedriver
放到了/home/xxx/drivers/bin/
目錄下)
export PATH=/home/xxx/drivers/bin:$PATH
在CentOS
中,更推薦在最後export PATH
,而前面加上一行賦值
PATH=$PATH:/home/xxx/drivers/bin
這兩種方式作用上是完全等價的。
3. 安裝selenium
selenium
可以在你專案的虛擬環境中簡單地用pip
安裝
$ pip3 install selenium
4. 指令碼測試
from selenium.webdriver import Chrome from selenium.webdriver.chrome.options import Options DRIVER_PATH = '/home/xxx/drivers/bin/chromedriver' if __name__ == "__main__": # 設定瀏覽器 options = Options() options.add_argument('--no-sandbox') options.add_argument('--headless')# 無頭引數 options.add_argument('--disable-gpu') # 啟動瀏覽器 driver = Chrome(executable_path=DRIVER_PATH, options=options) # 訪問目標URL driver.get('https://www.baidu.com/') print(driver.page_source) driver.close() driver.quit()
注意,這裡的--no-sandbox
和--headless
是必須的,而且必須按照--no-sandbox
在最前面的順序,否則會報一些非常摸不著頭腦的錯誤(這就是最坑的地方)。
希望看到這篇文章的你能解決想要解決的問題。