编程开源技术交流,分享技术与知识

网站首页 > 开源技术 正文

无头浏览器(headless browser),一种没有界面的浏览器

wxchong 2024-08-07 01:31:39 开源技术 63 ℃ 0 评论

0x0 什么是无头浏览器

什么是无头浏览器(headless browser),简单来说是一种没有图形界面gui的WEB浏览器。做前端开发和Web测试的同学对 Headless(无头浏览器)都不会陌生.它可以直接运行在服务端,向客户端提供服务接口。既然是浏览器那么浏览器该有的东西它都应该有,只是看不到界面而已。我们使用浏览器的一般步骤为:启动浏览器、打开一个网页、进行交互。而无头浏览器指的是我们使用脚本来执行以上过程的浏览器,能模拟真实的浏览器使用场景。它提供了对于网页的控制,这种控制所依赖的环境和有界面 web 浏览器类似。它是良好的网页测试工具,提供了和普通 web 浏览器同样的功能,包括渲染 HTML、页面布局、颜色以及字体,同时也提供了 js和ajax的加载和执行。

0x1 它有什么用途

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

0x2 有哪些无头浏览器

Chrome headless:目前最新的Chrome版本在Mac,Linux,Windows上都可以使用headless模式

调用方式如下:

chrome --headless http://www.test.org

PhantomJS:基于QtWebkit的无界面浏览器,它会把网站加载到内存并执行页面上的 JavaScript。可在nodejs中使用PhantomJS。目前使用最为广泛,也是最被认可的无头浏览器。它采用的是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 headless

示例:

from selenium import webdriver

options = webdriver.ChromeOptions()

#设置proxy时添加的额外参数,允许不安全的证书

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

#添加无头参数

options.add_argument('headless')

0x4 与nodejs结合使用

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

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(); })();

0x5 与java 结合使用

使用htmlunit示例:

public class Main {

public static void main(String[] args) throws FailingHttpStatusCodeException, MalformedURLException, IOException {

final WebClient mWebClient = new WebClient();

mWebClient.getOptions().setCssEnabled(false);

mWebClient.getOptions().setJavaScriptEnabled(false);

final HtmlPage mHtmlPage = mWebClient.getPage("http://127.0.0.0/web");

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

mWebClient.closeAllWindows();

}

}

Tags:

本文暂时没有评论,来添加一个吧(●'◡'●)

欢迎 发表评论:

最近发表
标签列表