網路爬蟲-liunx環境下部署selenium+chromedriver
阿新 • • 發佈:2019-01-07
由於一些萬惡的網站需要載入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