让 Selenium 在 Linux 中以有头模式运行

教你一招,让 Selenium 在 Linux 中以有头模式运行

常用 Selenium 或者 Puppeteer 的同窗都知道,启动的 Chrome 浏览器分为有头模式和无头模式node

若是是有头模式,则会弹出一个 Chrome 浏览器窗口,而后你能看到这个浏览器里面在自动操做;而无头模式则不会弹出任何窗口,只有产生一个进程python

下面这篇文章中,咱们介绍了一个探测模拟浏览器特征的网站web

juejin.cn/post/693048…chrome

经过他咱们能够发现,在不作任何设置的状况下,Selenium 或者 Puppeteer 启动的浏览器有几十个特征可以被目标网站识别为爬虫,而且无头模式的特征比有头模式的特征多得多浏览器

也就是说,即便你不使用任何隐藏特征的技术,仅仅使用有头模式,你都会安全不少;若是网站不是很是严格的反爬虫,不少状况下,使用无头模式更容易被发现,但使用有头模式,更难被发现安全

下图为使用 有头模式,不使用任何隐藏特征的技术访问检测网站服务器

下图为不使用 无头模式,不使用任何隐藏特征的技术访问检测网站:markdown

因此,通常状况下,你应该多使用有头模式post

但问题在于,当咱们要在 Linux 服务器上面使用 Selenium 或者 Puppeteer 运行爬虫的时候,就会发现有头模式始终会报错网站

这是由于,有头模式须要系统提供图形界面支持,才能绘制浏览器窗口,可是 Linux 服务器通常来讲是没有图形界面的,因此有头模式必定会失败

在这种状况下,为了可以使用模拟浏览器的有头模式,咱们须要搞一个假的图形界面出来,从而欺骗浏览器,让它的有头模式可以正常使用

为了达到这个目的,咱们可使用一个叫作 Xvfb的东西,这个东西在维基百科上面的介绍以下:

Xvfb 在一个没有图像设备的机器上实现了 X11显示服务的协议,它实现了其余图形界面都有的各类接口,但并无真正的图形界面

因此当一个程序在 Xvfb 中调用图形界面相关的操做时,这些操做都会在虚拟内存里面运行,只不过你什么都看不到而已

使用 Xvfb,咱们就能够欺骗 Selenium 或者 Puppeteer,让它觉得本身运行在一个有图形界面的系统里面,这样一来就可以正常使用有头模式了

要安装 Xvfb 很是简单,以 Ubuntu 为例,只须要执行下面两行命令就能够了:

sudo apt-get update
sudo apt-get install xvfb
复制代码

如今,咱们来写一段很是简单的 Selenium 操做 Chrome 的代码:

import time
from selenium.webdriver import Chrome
driver = Chrome('./chromedriver')
driver.get('https://bot.sannysoft.com/')
time.sleep(5)
driver.save_screenshot('screenshot.png')
driver.close()
print('运行完成')
复制代码

若是直接在服务器上运行,效果以下图所示:

因为 Linux 服务器本来没有图形界面,因此程序一定会报错

如今,咱们只须要在运行这段代码的命令前面加上xvfb-run,再来看看运行效果:

代码成功运行,没有报错

如今咱们从服务器上把这个生成的screenshot.png文件拉下来,打开之后能够看到内容以下:

能够看到,虽然窗口比较小,但确实是有头模式下面的检测结果

固然,咱们也能够调整一下窗口大小,增长参数:xvfb-run python3 test.py -s -screen 0 1920x1080x16就能伪装在一个分辨率为 1920x1280 的显示器上运行程序了

而后修改 Selenium 的代码,设置浏览器窗口的大小:

运行效果以下图所示:

本文演示仅仅使用的是 Python操做 Selenium,一样你也能够试一试使用 Puppeteer,只须要把启动命令改成xvfb-run node index.js 便可!source:未闻Code

相关文章
相关标签/搜索