1. 程式人生 > >網路爬蟲-liunx環境下部署selenium+chromedriver

網路爬蟲-liunx環境下部署selenium+chromedriver

由於一些萬惡的網站需要載入js才能抓取資料,我們只能使用selenium去抓取,我們知道selenium如何在windows上跑,只需要將正確對應版本的chromedriver放在Python路徑下或者配置PATH環境變數即可。
但是在linux環境下配置selenium+chrome需要配置的環境就很麻煩了,網上的教程也不太全面,我將我花了一天時間查閱的各種資料以及各種報錯整理下來,供大家參考。

chrome瀏覽器請自行面向百度下載。
chromedriver:
國內: 下載地址
國外: 下載地址

linux版本: centos 7.+
chrome瀏覽器版本:67.0.3396.79-1.el7 
chromedriver版本: 對應chrome瀏覽器 2.40
Python版本: Python 3.6.5

附上最新chrome對應的driver版本

chromedriver版本 支援的Chrome版本
v2.41 v67-69
v2.40 v66-68
v2.39 v66-68
v2.38 v65-67
v2.37 v64-66
v2.36 v63-65
v2.35 v62-64
v2.34 v61-63
v2.33 v60-62
v2.32 v59-61
v2.31 v58-60
v2.30 v58-60
v2.29 v56-58
v2.28 v55-57
v2.27 v54-56
v2.26 v53-55
v2.25 v53-55
v2.24 v52-54
v2.23 v51-53
v2.22 v49-52
v2.21 v46-50
v2.20 v43-48
v2.19 v43-47
v2.18 v43-46
v2.17 v42-43
v2.13 v42-45
v2.15 v40-43
v2.14 v39-42
v2.13 v38-41
v2.12 v36-40
v2.11 v36-40
v2.10 v33-36
v2.9 v31-34
v2.8 v30-33
v2.7 v30-33
v2.6 v29-32
v2.5 v29-32
v2.4 v29-32

安裝chromeium:

# 安裝最新的chrome瀏覽器
[root@izwz97vf52xuyjdkqfsw1oz ~]# yum install -y chromium

安裝chromedriver:

# 安裝unzip
[root@izwz97vf52xuyjdkqfsw1oz ~]# yum install -y unzip zip
# 將下載好的chromedriver解壓
[root@izwz97vf52xuyjdkqfsw1oz ~]# unzip chromedriver_linux64.zip
# 將解壓後的chromedriver移至/usr/bin/
[root@izwz97vf52xuyjdkqfsw1oz ~]# mv chromedriver /usr/bin

安裝xvf8:

# 安裝虛擬GUI--xvf8
[root@izwz97vf52xuyjdkqfsw1oz ~]# yum install Xvfb -y
[root@izwz97vf52xuyjdkqfsw1oz ~]# yum install xorg-x11-fonts* -y 

新建在/usr/bin/ 一個名叫 xvfb-chrom 的檔案寫入以下內容:

[[email protected] ~]# vim /usr/bin/xvfb-chrom

#!/bin/bash  

_kill_procs() {  
  kill -TERM $chromium  
  wait $chromium  
  kill -TERM $xvfb  
}  

# Setup a trap to catch SIGTERM and relay it to child processes  
trap _kill_procs SIGTERM  

XVFB_WHD=${XVFB_WHD:-1280x720x16}  

# Start Xvfb  
Xvfb :99 -ac -screen 0 $XVFB_WHD -nolisten tcp &  
xvfb=$!  

export DISPLAY=:99  

chromium --no-sandbox --disable-gpu[email protected] &  
chromium=$!  

wait $chromium  
wait $xvfb  

更改許可權(重要):

[root@izwz97vf52xuyjdkqfsw1oz ~]# chmod +x chromedriver
[root@izwz97vf52xuyjdkqfsw1oz ~]# chmod +x xvfb-chrom

更改軟連線:

[root@izwz97vf52xuyjdkqfsw1oz ~]# ln -s /usr/lib64/chromium-browser/chromium-browser.sh /usr/bin/chromium
[root@izwz97vf52xuyjdkqfsw1oz ~]# rm -rf /usr/bin/chromium-browser
[root@izwz97vf52xuyjdkqfsw1oz ~]# ln -s /usr/bin/xvfb-chromium /usr/bin/chromium-browser
[root@izwz97vf52xuyjdkqfsw1oz ~]# ln -s /usr/bin/xvfb-chromium /usr/bin/google-chrome
[root@izwz97vf52xuyjdkqfsw1oz ~]# ll /usr/bin/ | grep chrom*

OK 大功告成 嘗試一下是否能正常執行

[root@izwz97vf52xuyjdkqfsw1oz ~]# vim test1.py

from selenium import webdriver
from selenium.webdriver.chrome.options import Options

chrome_options = Options()
chrome_options.add_argument('--headless')
chrome_options.add_argument("--no-sandbox")
chrome_options.add_argument('--disable-gpu')
chrome_options.add_argument('--disable-dev-shm-usage')
driver = webdriver.Chrome(executable_path=(r'/usr/bin/chromedriver'), chrome_options=c    hrome_options)
driver.get('https://www.baidu.com')
print(driver.title)
driver.quit()

[root@izwz97vf52xuyjdkqfsw1oz ~]# python3 test1.py
百度一下,你就知道

報錯問題

錯誤一:

selenium.common.exceptions.WebDriverException: Message: unknown error: Chrome failed to start: exited abnormally (Driver info: chromedriver=xxxxxx (36222509aa6e819815938cbf2709b4849735537c),platform=Linux 4.10.0-42-generic x86_64)

解決方案:

請檢視chrome瀏覽器對應的chromedriver是否正確
windows下載的chromedriver.zip檔案請直接用scp傳輸到liunx系統下之後用unzip解壓再放入/usr/bin下

錯誤二:

selenium.common.exceptions.WebDriverException: Message: unknown error: Chrome failed to start: exited abnormally (Driver info: chromedriver=xxxxxx (36222509aa6e819815938cbf2709b4849735537c),platform=Linux 4.10.0-42-generic x86_64)

解決方案:

記得給chromedriver賦予許可權 --> chmod +x /usr/bin/chromedriver
給chrome賦予引數
from selenium.webdriver.chrome.options import Options

chrome_options = Options()
chrome_options.add_argument('--headless')
chrome_options.add_argument("--no-sandbox")
chrome_options.add_argument('--disable-gpu')

錯誤三:

selenium WebDriverException: Message: unknown error: DevToolsActivePort file doesnt exist

解決方案:

1.禁用sandbox
#加上下面兩行,解決報錯
chrome_options.add_argument('--no-sandbox')
 chrome_options.add_argument('--disable-dev-shm-usage')
chrome_options.add_argument('window-size=1920x3000') #指定瀏覽器解析度
chrome_options.add_argument('--disable-gpu') #谷歌文件提到需要加上這個屬性來規避bug
chrome_options.add_argument('--hide-scrollbars') #隱藏滾動條, 應對一些特殊頁面
chrome_options.add_argument('blink-settings=imagesEnabled=false') #不載入圖片, 提升速度
chrome_options.add_argument('--headless') #瀏覽器不提供視覺化頁面. linux下如果系統不支援視覺化不加這條會啟動失敗

driver=webdriver.Chrome(chrome_options=chrome_options)
#executable_path驅動路徑

2.檢視chromedriver是否賦予許可權 chmod +x /usr/bin/chromedriver

若還遇到其他報錯問題 可留言到我部落格下面