CentOS7下python3 selenium3 使用Chrome的無頭瀏覽器 截取網頁全屏圖片


前言

selenium是一個模擬瀏覽器的自動化執行框架,但是如果每次執行都要打開瀏覽器來處理任務的話,效率上都不高。最重要的是如果安裝在Centos7服務器環境下,打開瀏覽器來模擬操作是更加不合適的,尤其是碰上需要截取網頁圖片這樣的需求。

這時候就要考慮使用Chrome的無頭瀏覽器模式了。所謂的無頭瀏覽器模式也就是不需要打開瀏覽器,但是卻可以起到模擬打開瀏覽器的執行效果,一切無界面執行。

下面來看看如果安裝部署到執行。

1.安裝chrome

1.1 添加googlerepo

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 Chrome79.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安裝中文字體即可,這里就不多做介紹。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM