Linux服务器图形浏览器,在 Linux 服务器中建立假桌面运行模拟浏览器有头模式

常用 Selenium 或者 Puppeteer 的同窗都知道,他们启动的 Chrome 浏览器分为有头模式和无头模式。在本身电脑上操做时,若是是有头模式,会弹出一个 Chrome 浏览器窗口,而后你能看到这个浏览器里面在自动操做。而无头模式则不会弹出任何窗口,只有进程。node

别去送死了。Selenium 与 Puppeteer 能被网站探测的几十个特征这篇文章中,咱们介绍了一个探测模拟浏览器特征的网站。经过他咱们能够发现,在不作任何设置的状况下,Selenium 或者 Puppeteer 启动的浏览器有几十个特征可以被目标网站识别为爬虫。而且,无头模式的特征比有头模式的特征多得多。python

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

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

1460000039215418

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

1460000039215420

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

但问题在于,当咱们要在 Linux 服务器上面使用 Selenium 或者 Puppeteer 运行爬虫的时候,就会发现有头模式始终会报错。这是由于,有头模式须要系统提供图形界面支持,才能绘制浏览器窗口,可是 Linux 服务器通常来讲是没有图形界面的,因此有头模式必定会失败。bash

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

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

Xvfb or X virtual framebuffer is a display server implementing the X11 display server protocol. In contrast to other display servers, Xvfb performs all graphical operations in virtual memory without showing any screen output.

Xvfb 在一个没有图像设备的机器上实现了 X11显示服务的协议。它实现了其余图形界面都有的各类接口,但并无真正的图形界面。因此当一个程序在 Xvfb 中调用图形界面相关的操做时,这些操做都会在虚拟内存里面运行,只不过你什么都看不到而已。spa

使用 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('运行完成')

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

1460000039215421

由于没有图形界面,因此程序一定报错。

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

1460000039215419

代码成功运行,没有报错。如今咱们从服务器上把这个生成的screenshot.png文件拉下来,打开之后能够看到内容以下:

1460000039215422

能够看到,虽然窗口比较小,但确实是有头模式下面的检测结果。固然,咱们也能够调整一下窗口大小,增长参数:xvfb-run python3 test.py -s -screen 0 1920x1080x16就能伪装在一个分辨率为1920x1280的显示器上运行程序了。而后修改 Selenium 的代码,设置浏览器窗口的大小:

1460000039215423

运行效果以下图所示:

1460000039215417

本文演示使用的是 Python操做 Selenium,你也能够试一试使用 Puppeteer,只须要把启动命令改成xvfb-run node index.js就能够了。

有了本文之后,再结合我以前的两篇文章:

相信你的模拟浏览器可以绕过更多的网站。

1460000021285360

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值