您现在的位置是:首页 >技术交流 >python3 selenium3 使用Chrome的无头浏览器 截取网页全屏图片网站首页技术交流

python3 selenium3 使用Chrome的无头浏览器 截取网页全屏图片

三只小菜猿 2023-02-04 10:50:37
简介前言 selenium是一个模拟浏览器的自动化执行框架,但是如果每次执行都要打开浏览器来处理任务的话,效率上都不高。最重要的是如果安装在Centos7服务器环境下,打开浏览器来模拟操作是更加不合适的,尤其是碰上需要截取网页图片这样的需求。 这时候就要考虑使用Chrome的无头浏览器模式了。所谓的无头浏览器模式也就是不需要打开浏览器,但是却可以起到模拟打开浏览器的执行效果,一切无界面执行。

前言

selenium是一个模拟浏览器的自动化执行框架,但是如果每次执行都要打开浏览器来处理任务的话,效率上都不高。最重要的是如果安装在Centos8服务器环境下,打开浏览器来模拟操作是更加不合适的,尤其是碰上需要截取网页图片这样的需求。

这时候就要考虑使用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
[google-chrome]
name=google-chrome
baseurl=http://dl.google.com/linux/chrome/rpm/stable/$basearch
enabled=1
gpgcheck=0
gpgkey=https://dl-ssl.google.com/linux/linux_signing_key.pub

1.2 使用yum安装chrome浏览器(不是root用户前面加sudo)

yum makecache
sudo yum install google-chrome-stable -y
sudo yum install google-chrome-stable -y

上面则是centos安装谷歌浏览器,下面则安装debian的安装谷歌浏览器教程

1.安装chrome

wget https://dl.google.com/linux/direct/google-chrome-stable_current_amd64.deb
sudo apt-get -f install 
dpkg -i google-chrome-stable_current_amd64.deb

1.1如果提示错误:dpkg: error processing package google-chrome-stable (--install): 之后执行以下命令

sudo apt-get upgrade
sudo apt-get update
sudo apt-get -f install
dpkg -i google-chrome-stable_current_amd64.deb

经过以上步骤,谷歌浏览器就安装完成了,接下来安装驱动

2.安装chromedriver驱动

2.1 查看chrome的版本

安装成功之后,查看安装的chrom版本如下

[root@locust03 ~]# google-chrome --version
Google Chrome 96.0.4664.45 
[root@locust03 ~]

2.2 下载chromedriver

****selenium如果想要执行chrome浏览器的话,是需要安装驱动chromedriver的,而下载chromedriver可以从两个地方去下载, 点击访问如下:

点击访问官网 点位访问国内淘宝镜像地址 那么其实一般都是访问国内的镜像地址,如下:****

点击访问官网 点位访问国内淘宝镜像地址

找到与自己相对应的最新版本,进行下载 因为我准备安装在Centos8服务器上,所以选择linux64位的版本。

wget http://npm.taobao.org/mirrors/chromedriver//96.0.4664.45/chromedriver_linux64.zip
wget http://npm.taobao.org/mirrors/chromedriver//98.0.4758.102/chromedriver_linux64.zip

2.3 添加至环境变量$PATH

# 1.进入opt目录
[root@server opt]# cd /opt/
# 2.下载chromdirver
[root@server opt]# wget http://npm.taobao.org/mirrors/chromedriver/78.0.3904.105/chromedriver_linux64.zip
# 3.解压zip包
[root@server opt]# 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@server opt]# mkdir -p /opt/driver/bin
# 6.将chromedirver放入文件夹driver中bin下
[root@server opt]# mv chromedriver /opt/driver/bin/

配置环境变量如下:

[root@server driver]# vim /etc/profile
...
# 添加内容
export DRIVER=/opt/driver
export PATH=$PATH:$DRIVER/bin

设置环境变量立即生效,并执行全局命令查看chromedirver版本:

[root@server ~]# source /etc/profile
[root@server ~]
[root@server ~]# chromedriver --version
ChromeDriver 78.0.3904.105 (60e2d8774a8151efa6a00b1f358371b1e0e07ee2-refs/branch-heads/3904@{#877})
[root@server ~]

能全局执行chromedriver说明环境配置生效了。

3. 安装selenium

selenium可以在你项目的虚拟环境中简单地用pip安装

pip3 install selenium
[root@server selenium_ex]# pip3 install selenium
Looking in indexes: http://mirrors.tencentyun.com/pypi/simple
Collecting selenium
  Downloading http://mirrors.tencentyun.com/pypi/packages/80/d6/4294f0b4bce4de0abf13e17190289f9d0613b0a44e5dd6a7f5ca98459853/selenium-3.141.0-py2.py3-none-any.whl (904kB)
     |████████████████████████████████| 911kB 990kB/s 
Requirement already satisfied: urllib3 in /usr/local/python3/lib/python3.7/site-packages (from selenium) (1.25.6)
Installing collected packages: selenium
Successfully installed selenium-3.141.0
[root@locust03 selenium_ex]

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.jianshu.com/u/a94f887f8776'
        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@server selenium_ex]# python3 test.py 
[root@server selenium_ex]
[root@server selenium_ex]# ls
2019-11-28-15-06-48.png  test.py
[root@server selenium_ex]#

将图片下载查看一下,如下:

可以看到已经能够正常模拟浏览器登陆,并且截取网页的图片下来。可以从图片中看到,凡是中文的地方都是显示方框的符号,这是因为Centos8默认下是没有安装中文字体的,所以chrom浏览器打开就无法正常显示中文。

linux使用——CentOS8安装中文字体 背景

项目开发中,给照片添加水印时,发现添加的字体显示为“口口口口口口”,上网寻找答案,发现是系统部署的Linux服务器不支持水印中的中文字体。

解决方法

**服务器Linux系统中导入中文字体

系统环境**

**CentOS8

步骤**

使用root用户登录系统 查看已经安装的中文字体:fc-list :lang=zh

在这里插入图片描述 创建中文字体目录并分配权限

创建目录:

mkdir /usr/share/fonts/chinese

分配权限:

chmod -R 777 /usr/share/fonts/chinese

备注:CentOS字体所在目录为 /usr/share/fonts下

从windows系统上查找所需要的中文字体

导入到/usr/share/fonts/chinese目录下

windows字体目录存在C:WindowsFonts下,字体文件一般都是.TTF .TTC 后缀 修改Linux字体配置文件

编辑字体配置文件:vim /etc/fonts/fonts.conf

增加中文字体目录,如下图:

<dir>/usr/share/fonts/chinese</dir>

刷新缓存:fc-cache 如果fc-cache失效,重启下系统


梦想加空间!平时喜欢研究各种技术,目前在从事后端开发工作,热爱生活、热爱工作。