前言
selenium是一個模擬瀏覽器的自動化執行框架,但是如果每次執行都要打開瀏覽器來處理任務的話,效率上都不高。最重要的是如果安裝在Centos7服務器環境下,打開瀏覽器來模擬操作是更加不合適的,尤其是碰上需要截取網頁圖片這樣的需求。
這時候就要考慮使用Chrome的無頭瀏覽器模式了。所謂的無頭瀏覽器模式也就是不需要打開瀏覽器,但是卻可以起到模擬打開瀏覽器的執行效果,一切無界面執行。
下面來看看如果安裝部署到執行。
1.安裝chrome
1.1 添加google
的repo
源
vim /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
安裝chrome
瀏覽器
sudo yum makecache sudo yum install google-chrome-stable -y
2.安裝chromedriver
驅動
2.1 查看chrome
的版本
安裝成功之后,查看安裝的chrom版本如下:
[root@localhost opt]# google-chrome --version Google Chrome 79.0.3945.79 [root@localhost opt]#
2.2 下載chromedriver
selenium
如果想要執行chrome
瀏覽器的話,是需要安裝驅動chromedriver
的,而下載chromedriver
可以從兩個地方去下載,點擊訪問如下:
那么其實一般都是訪問國內的鏡像地址,如下:
可以看到提供下載的版本挺多的,從上面看到剛剛安裝的chrome版本號Google Chrome
79.0.3945.79,所以按照版本號大概搜索一下
點擊最新的版本號進去,可以看到下載的系統版本,
因為我准備安裝在Centos7服務器上,所以選擇linux64位的版本。
wget http://npm.taobao.org/mirrors/chromedriver/79.0.3945.79/chromedriver_linux64.zip
我將chromedriver_linux64.zip
下載在/opt
目錄下,然后進行解壓。最后寫入環境配置文件/etc/profile
即可。
# 1.進入opt目錄 [root@localhost opt]# cd /opt/ # 2.下載chromdirver [root@localhost opt]# wget http://npm.taobao.org/mirrors/chromedriver/78.0.3904.105/chromedriver_linux64.zip # 3.解壓zip包 [root@localhostopt]# unzip chromedriver_linux64.zip # 4.得到一個二進制可執行文件 [root@server opt]# ls -ll chromedriver -rwxrwxr-x 1 root root 11610824 Nov 19 02:20 chromedriver # 5. 創建存放驅動的文件夾driver [root@localhost opt]# mkdir -p /opt/driver/bin # 6.將chromedirver放入文件夾driver中bin下 [root@localhost opt]# mv chromedriver /opt/driver/bin/
配置環境變量如下:
[root@localhost driver]# vim /etc/profile ... # 添加內容 export DRIVER=/opt/driver export PATH=$PATH:$DRIVER/bin
設置環境變量立即生效,並執行全局命令查看chromedirver版本:
[root@localhost ~]# source /etc/profile [root@localhost ~]# [root@localhost ~]# chromedriver --version ChromeDriver 78.0.3904.105 (60e2d8774a8151efa6a00b1f358371b1e0e07ee2-refs/branch-heads/3904@{#877}) [root@localhost ~]#
能全局執行chromedriver
說明環境配置生效了。
3. 安裝selenium
selenium
可以在你項目的虛擬環境中簡單地用pip
安裝
pip3 install selenium
4. 腳本測試
編寫一個test.py的腳本,如下:
from selenium.webdriver import Chrome from selenium.webdriver.chrome.options import Options import time import os.path # 配置驅動路徑 DRIVER_PATH = '/opt/driver/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) driver.maximize_window() try: # 訪問頁面 url = 'https://www.cnblogs.com/llxpbbs/' driver.get(url) time.sleep(1) # 設置截屏整個網頁的寬度以及高度 scroll_width = 1600 scroll_height = 1500 driver.set_window_size(scroll_width, scroll_height) # 保存圖片 img_path = os.getcwd() img_name = time.strftime('%Y-%m-%d-%H-%M-%S', time.localtime(time.time())) img = "%s.png" % os.path.join(img_path, img_name) driver.get_screenshot_as_file(img) # 關閉瀏覽器 driver.close() driver.quit() except Exception as e: print(e)
在服務器上執行如下:
[root@localhost opt]# python3 test.py
[root@localhost opt]# ll
總用量 4812
-rw-r--r-- 1 root root 44991 8月 22 18:19 2019-12-17-18-19-32.png
-rw-r--r-- 1 root root 4875160 11月 19 2019 chromedriver_linux64.zip
drwxr-xr-x 3 root root 17 8月 22 17:34 driver
drwxr-xr-x 3 root root 20 8月 22 17:29 google
-rw-r--r-- 1 root root 1158 12月 17 2019 test.py
[root@localhost opt]#
將圖片下載查看一下即可,
可以看到已經能夠正常模擬瀏覽器登陸,並且截取網頁的圖片下來。可以從圖片中看到,凡是中文的地方都是顯示方框的符號,這是因為Centos7默認下是沒有安裝中文字體的,所以chrom瀏覽器打開就無法正常顯示中文。
解決的方式只要給Centos7安裝中文字體即可,這里就不多做介紹。