nodejs抓取动态网页(0x0什么是无头浏览器有哪些无头Chromeheadless)

优采云 发布时间: 2022-01-18 17:17

  nodejs抓取动态网页(0x0什么是无头浏览器有哪些无头Chromeheadless)

  0x0 什么是无头浏览器

  什么是无头浏览器(headless browser),简单来说就是没有图形界面gui的WEB浏览器。做前端开发和web测试的同学对Headless(无头浏览器)比较熟悉。它可以直接在服务器上运行,并向客户端提供服务接口。既然是浏览器,它应该有浏览器应该有的一切,却看不到界面。我们使用浏览器的一般步骤是:启动浏览器、打开网页并进行交互。无头浏览器是指我们使用脚本执行上述过程的浏览器,它可以模拟真实的浏览器使用场景。它在类似于接口 Web 浏览器的环境中提供对网页的控制。它是一个很好的网络测试工具,提供与普通网络浏览器相同的功能,

  

  0x1 有什么用

  它的主要用途可以是:自动表单提交、web自动化控制、模拟键盘输入、抓取网页执行和渲染(解决传统HTTP抓取web难以处理异步请求的问题)、使用一些自带的调试工具浏览器和性能分析工具帮助分析问题、前端无界面自动化测试等。

  0x2 什么是无头浏览器

  Chrome headless:最新的 Chrome 版本可以在 Mac、Linux、Windows 上使用 headless 模式

  调用方法如下:

  铬——无头

  PhantomJS:基于 QtWebkit 的无界面浏览器,将 网站 加载到内存中并在页面上执行 JavaScript。PhantomJS 在 nodejs 中可用。目前最广泛使用和认可的无头浏览器。它使用Webkit内核,因此对Safari和Chrome等当前浏览器有更好的兼容性。

  SlimerJS:基于 Gecko 的无头浏览器,SlimerJS 和 PhantomJS 基本兼容,即用 Gecko 的 PhantomJS 替换一个核心。SlimerJS 提供的 API 可以使用 javascript 模拟浏览器上的任何操作:打开页面、前进/后退、页面点击、鼠标滚动、DOM 操作、CSS 选择器、Canvas 画布、SVG 绘图等。

  HtmlUnit:纯java开发的无头浏览器。它在模拟浏览器中运行。它完全用java开发。javascript 引擎使用 Rhinojs 引擎。由于不是基于Webkit、Gecko等主流内核开发的,兼容性不好。

  Puppeteer:它是一个 Nodejs 库,可以调用 Chrome 的 API 来操作 Web。与 PhantomJs 相比,它最大的特点是它的操作 Dom 可以完全在内存中模拟。不打开浏览器在V8引擎中处理由Chrome团队维护,会有更好的兼容性和前景。

  0x3 配合python使用

  python 通过 selenium 使用 chrome 无头

  例子:

  从硒导入网络驱动程序

  选项 = webdriver.ChromeOptions()

  #设置代理以允许不安全证书时添加的附加参数

  options.add_argument('--ignore-certificate-errors')

  #添加无头参数

  options.add_argument('headless')

  0x4与nodejs结合使用

  Puppeteer 一个节点库,通过 DevTools 协议控制无界面的 Chromium 浏览器。使用 Puppeteer,示例代码:

  const puppeteer = require('puppeteer');

  (async() => { const browser = await puppeteer.launch();

  常量页面 = 等待 browser.newPage();

  等待 page.goto('');

  等待 page.screenshot({path: 'example.png'});

  等待浏览器.close(); })();

  0x5 与 java 一起使用

  使用 htmlunit 的示例:

  公共类主要{

  public static void main(String[] args) 抛出 FailingHttpStatusCodeException、MalformedURLException、IOException {

  最终 WebClient mWebClient = new WebClient();

  mWebClient.getOptions().setCssEnabled(false);

  mWebClient.getOptions().setJavaScriptEnabled(false);

  最终的 HtmlPage mHtmlPage = mWebClient.getPage("");

  System.out.println(mHtmlPage.asText());

  mWebClient.closeAllWindows();

  }

  }

0 个评论

要回复文章请先登录注册


官方客服QQ群

微信人工客服

QQ人工客服


线