什么是无头浏览器?它们会帮助还是阻碍数据采集行动?
无头浏览器是一种没有图形用户界面(GUI)的网络浏览器。它没有任何可见窗口或用户界面元素。
您只需使用脚本来处理页面内容。
这意味着你可以做各种坏事。
但我们今天只谈白帽的东西。
无头浏览器有什么特别之处?
- 更快地与网络内容进行交互--这意味着您可以获得更多需要的数据。
- 加载页面不需要太多带宽或时间,这意味着你无需等待。
- 这听起来很酷,有点像 "沉睡谷"(Sleepy Hollow)的感觉--这可真够坏的。
无头浏览器有什么用?
无头浏览器可以轻松访问网页 DOM(文档对象模型),这对使用AngularJS 等 JavaScript 框架的前端开发人员很有帮助。
在自动测试过程中,它们还常用于在无头服务器上加载和运行功能网页。这就是所谓的无头浏览器测试。
无头浏览器测试
无头测试是一种用于网页验证的自动化测试技术。程序使用自动化、脚本或其他工具控制网页浏览器,而不渲染图形或执行可见的用户界面组件。无头浏览器测试的目标包括
- 检查 HTML/XHTML 页面上标记、内容和样式的有效性。
- 验证网络或登录表单
- 为事件处理程序和AJAX操作评估 JavaScript。
这是为了验证动态内容在屏幕上的显示位置等是否正确。
无头浏览器还能与其他软件配合使用。除了测试和网络开发外,它们还有助于促进数据采集。
无头浏览器刮擦
无头式刮擦是一种自动数据提取技术,可与网络刮擦工具结合使用。
无头模式下的浏览器
- 抓取网站并将网站数据存储在磁盘的本地目录中。
- 可从大多数现代网站检索多个页面。
- 模仿执行 javascript 渲染所需的用户代理配置文件。
- 使用命令行参数更高效地抓取数据。
例如,无头浏览器通常用于从在线目录中抓取数据,从电子商务网站中抓取定价信息,或从嵌入公司网站的社交媒体小工具/图标中抓取数据。
有哪些流行的无头浏览器?
无头铬
谷歌 Chrome 浏览器的无头版本。
无头火狐
这是一个 Mozilla 项目,旨在为其最新的网络浏览器创建一个无头版本,并启用对WebGL和 JavaScript 的支持。
HtlmUnit
一个使用无头浏览器加载和验证网页的功能测试框架。
简单浏览器
使用Net 4软件制作的无头浏览器,能够执行浏览器自动化活动。它不允许使用 JavaScript,但可以在提交或导航前修改用户代理、推荐人、请求头、表单值等。
SlimerJS
Mozilla 的一个项目,旨在让 JavaScript 和HTML5在类似文件系统的环境中运行。它以 Gecko(火狐浏览器背后的浏览器引擎)为核心。这将使它能够完全支持所有 JavaScript API(例如,即使这些 API 在某些方面没有实现或不完整)。
ZombieJS
Zombie 提供 JavaScript API 并使用Chromium。Chromium 可在各种网页上运行,但主要用于自动测试 DOM API 和网站行为。
如何使用无头浏览进行网络搜刮?
无头浏览器的目的是实现自动化(功能测试、网页开发等)。无头浏览器使用方便,能在无人看管/无人干预的情况下完成任务,因此也是网络搜索的绝佳工具。
使用无头浏览器进行网络搜刮时,需要向浏览器提供一个 URL 列表,然后等待加载。在无头浏览器中加载时,可以通过命令行向无头浏览器发送命令来实现自动化。
它能让你完全控制何时以及如何将 URL 导入无头浏览器。
要使用无头浏览器抓取网站,需要在应用程序中添加库,以便浏览器能与它们通信。这种通信可以通过命令行进行,也可以通过连接网络服务器进行。
最常见的图书馆有
要求
通过 HTTP 请求与网络服务器交互所需的Python库。
jsdom
该库还需要一个名为 jsdom-global 的软件包,用于创建无头浏览器所需的全局对象。
我们需要记住,Puppeteer 是一个基于承诺的库:它对引擎舱中的无头 Chrome 实例执行异步调用。
噩梦
该库用于Electron 应用程序。它为 Electron 提供自动化工具,应用程序可利用这些工具通过远程连接驱动 Electron 浏览器进程。
硒
有一些库可用于使用 Selenium 绑定(如 webdriver js 和 selenium-web driver)的无头 JavaScript。
您可能会想,建立一个图书馆一定很难,其实不然。让我们来看一个例子。
木偶师基础教程
首先,你需要将 Puppeteer 安装到项目目录中。
安装 Puppeteer
要在无头浏览器中使用 Puppeteer,请运行
npm i puppeteer
# or "yarn add puppeteer"
或运行 Puppeteer 的精简版:
npm i puppeteer-core
# or "yarn add puppeteer-core"
如上所述,所有 puppeteer 代码都在 NodeJS 中运行。您可以将其导出为一个工厂函数,该函数将返回一个包含控制 Chrome 浏览器方法的对象。您可以用它通过启动方法创建新的浏览器实例、导航到 URL、处理事件等。
以下代码片段用于 Puppeteer 脚本。
如果您想 ,请访问 https://example.com 并将截图保存为example.png:
将文件保存为example.js
const puppeteer = require('puppeteer');
(async () => {
const browser = await puppeteer.launch();
const page = await browser.newPage();
await page.goto('https://example.com');
await page.screenshot({ path: 'example.png' });
await browser.close();
})();
在命令行上执行脚本:
node example.js
如果您想创建 PDF:
将文件保存为hn.js。
const puppeteer = require('puppeteer');
(async () => {
const browser = await puppeteer.launch();
const page = await browser.newPage();
await page.goto('https://news.ycombinator.com', {
waitUntil: 'networkidle2',
});
await page.pdf({ path: 'hn.pdf', format: 'a4' });
await browser.close();
})();
小菜一碟,对吧?
上述示例只是一个代码片段。更多信息,请点击此处查看 Puppeteer 扩展教程。
在无头浏览器中使用网络搜刮工具有哪些限制?
无头服务器的控制能力通常较弱,因为许多任务都需要标准网络浏览器处理的额外插件或配置。例如,有些无头浏览器不支持CSS 选择器,这就增加了从 DOM 搜刮数据的难度。
尽管无头浏览器效率很高,但网页拦截可能会拖慢您的速度。根据你计划搜刮的网页数量,你需要考虑使用代理服务。代理服务将帮助你的 IP 地址免遭潜在的屏蔽。
在无头模式下使用的最佳代理
如果您的所有 API 调用和 HTTP 请求都来自同一个 IP 地址,那么整个进程都会被关闭。
与网络搜刮工具一起使用的最佳代理是旋转代理。这样,每个浏览器实例都使用不同的 IP 地址。
旋转住宅代理或反向连接代理是自动化测试和网络应用程序采集数据的理想选择。
想进一步了解使用无头浏览器进行网络搜刮的代理服务器?查看这篇文章,了解你需要多少个代理。
在这篇文章中,我们介绍了什么是无头浏览器,以及为什么无头浏览器可以帮助那些希望将其用作刮擦工具的人。
如果您对无头浏览器或任何与网络搜刮有关的问题有其他疑问,请随时在下面发表评论!
常见问题
如何开始?
只需选择一款能很好满足网络自动化需求的无头浏览器即可。有多种无头浏览器可供选择,如 Headless Chromium 和 SlimerJS。您还需要一个库。例如,如果你打算使用 Chrome 浏览器,就需要安装 Puppeteer 库。
为什么叫 "无头 "浏览器?
无头浏览器没有图形用户界面(GLU),运行时唯一能看到的是命令行界面(CLI)。网络开发人员用它来运行功能测试和网络搜索等自动化任务。
通过无头浏览器的 CLI,您可以加载网站并与之交互。从本质上讲,它就像一个高度可配置的代理,介于你和你在无头服务器中加载的网站之间。如果你是网络搜刮或无头浏览器的新手,本文将向你传授基础知识。如果你刚刚开始学习,这篇文章可能会对你有所帮助。
谁创建了无头 Chrome?
无头 Chrome 浏览器是由谷歌主导的一个开源项目。
除了自动网络搜刮之外,我还能将它用于其他目的吗?
是的!您可以用它来运行自动测试和功能测试。在决定哪种无头服务器最符合您的需求之前,您应该考虑所有选项。
由于无头浏览器的目的是实现自动化,因此它是非常好的搜刮工具,尤其是与命令行界面搭配使用时。
可以从命令行运行无头浏览器吗?
可以。许多无头服务器都允许你通过各自的CLI或网络用户界面(如Chrome)来运行它们。在某些情况下,你可能必须同时使用这两种方式,才能完全控制无头浏览器。
如何知道我的机器上是否运行了无头浏览器?
你可以查询本地系统的运行架构,并将其与你想使用的无头浏览器的架构进行比较。有些无头服务器是跨平台或支持多种架构的,但并非所有服务器都能以这种方式运行。在使用之前,你应该先确认一下。
无头浏览器真的不支持 CSS 选择器吗?
某些(但并非所有)无头服务器都是如此;尤其是PhantomJS不支持CSS选择器,而无头Chrome浏览器则支持。每个无头浏览器的开发人员都可能会在任何特定时间选择添加和/或删除不同的功能,这就是为什么你在假设任何事情之前都应该先确认一下的原因。
无头浏览器可以处理 javascript 代码吗?
在大多数情况下,无头浏览器在执行 JavaScript 代码时不会出现问题。许多网络开发人员使用无头浏览器来自动执行任务,他们需要 JavaScript 的全面支持才能实现目标。
由于并非所有无头浏览器都支持 JavaScript,因此您需要对每种浏览器进行研究,确定它们是否能满足您的特定需求。
某些无头服务器真的有应用程序接口吗?
是的!有些无头服务器有API,允许你以不同的方式使用它们,而不仅仅是通过代理服务器加载网站。你可以通过阅读无头浏览器的文档,查看它们提供了哪些类型的API。这是一个很好的方法,可以确定你是否应该将它们与网络刮擦工具一起使用,尤其是在有代理API可用的情况下。
哪些无头浏览器支持 CSS 选择器?
Headless Chrome 浏览器目前支持 CSS 选择器,而 PhantomJS 的 WebKit 引擎则不支持。有关系统依赖性的更多信息,请访问本网站。
为什么不是所有网络搜刮工具都被视为无头浏览器?
Scrapy 等网络搜刮工具模仿普通网络浏览器的用户界面(UI),从网站上搜刮数据。不过,由于这些工具不会将网页加载到自己的窗口中,因此我们不把它们归类为无头浏览器。
真的不能使用无头浏览器搜索移动网站吗?
无头浏览器并不能保证适用于所有网站页面,但它们可以正常运行大部分页面。移动专用网站即使能显示页面,也往往无法在无头服务器中正确加载。
我可以测试自己的无头浏览器吗?
您应该可以这样做,但不能保证无头浏览器一定能正常运行。由于每个无头服务器的功能和特性各不相同,您可能需要修改自己的工具才能正常运行。
举个基本例子,无头 Chrome 浏览器需要 Javascript,而 PhantomJS 则需要CORS标头才能正确加载网页。
在使用无头浏览器进行刮擦时,我可以采用哪些最佳实践?
网络搜刮的目的通常是从完全或部分无法访问的网站中提取数据,而无需在表单或按钮中手动输入任何网络数据。
如果您想进一步了解网络刮擦的工作原理,请查看这篇文章。
你必须合乎道德地使用无头浏览器。从完全或部分无法访问的网页中提取数据并不一定是件坏事。但是,如果网站所有者不希望你这样做,那就有可能是坏事。
在抓取任何网站页面之前,请务必仔细检查所有服务条款和隐私政策协议,因为这些条款可能会更改,恕不另行通知。
哪些无头浏览器最适合网络搜刮?
无头 Chrome 浏览器和 PhantomJS 是网络搜索的最佳选择,因为它们易于使用且速度相对较快。
为什么有些开发人员喜欢使用无头浏览器而不是普通浏览器?
有时,使用无头浏览器比使用普通浏览器更有必要或更方便,但这通常取决于项目的具体情况。例如,假设你想从需要使用 Javascript 才能正常工作的网站上抓取数据。在这种情况下,使用无头浏览器会比普通的 Google Chrome 浏览器更方便。
与其他同类工具相比,无头 Chrome 浏览器提供了更好的跟踪功能;在处理多个项目时,它将大有裨益。