CentOS7上使用Chrome的無頭瀏覽器

原文鏈接:https://www.jianshu.com/p/e2a6bb6550cc

0. 前言

說到Python爬蟲,就一定會涉及到“反爬”策略,就會遇到“爬取動態頁面元素”的問題,如果目標網站沒有其他的反爬措施,那麼“動態元素”就是我們這裏要解決的唯一難題。而解決的方式就是簡單粗暴地想辦法模擬人在瀏覽器上操作,進而觸發相應動態元素的加載,也就指向了強大的Selenium

衆所周知,Chrome是Google家的瀏覽器,在2007年開始推出了自己的無頭模式。而我們曾經熟悉的PhantomJS卻在之後不再被Selenium所支持(目前只支持ChromeFirefox的無頭模式,據說這是一種大廠效應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.2 yum安裝

$ sudo yum update
$ sudo yum install google-chrome-stable

2. 安裝chromedriver

2.1 查看chrome的版本

$ google-chrome --version

2.2 下載chromedriver

請注意chromechromedriver的區別,前者是瀏覽器,後者是其驅動,而二者缺一不可。推薦在官網下載最新的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在最前面的順序,否則會報一些非常摸不着頭腦的錯誤(這就是最坑的地方)。

希望看到這篇文章的你能解決想要解決的問題。



作者:deBroglie
鏈接:https://www.jianshu.com/p/e2a6bb6550cc
來源:簡書
著作權歸作者所有。商業轉載請聯繫作者獲得授權,非商業轉載請註明出處。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章