browser - 普通浏览器和 headless 浏览器的区别

标签 browser selenium-webdriver headless-browser

我经常遇到PhantomJS来运行 headless 浏览器 headless 浏览器

普通浏览器(用户调用或调用常规 Selenium Webdriver 代码)和 headless 浏览器有什么区别?

除此之外,我想澄清一下这些浏览器功能:

  • 标题
  • 本地存储
  • cookie

最佳答案

根据定义, headless 浏览器是没有图形用户界面 (GUI) 的 Web 浏览器。

通常,与网站的交互是使用带有 GUI 的浏览器通过鼠标和键盘完成的,而大多数 headless 浏览器提供 API 来操作页面/DOM、下载资源等。因此,例如,不要实际单击元素与鼠标, headless 浏览器允许您通过代码单击元素。

使用 PhantomJS 与页面交互的示例:

    page.evaluate(function() {
        //Fill in form on page
        document.getElementById('Name').value = 'John Doe'; 
        document.getElementById('Email').value = '<a href="https://stackoverflow.com/cdn-cgi/l/email-protection" class="__cf_email__" data-cfemail="c6aca9aea8e8a2a9a386aca9aea8e8a2a9a3" rel="noreferrer noopener nofollow">[email protected]</a>';
        //Submit
        $('#SubmitButton').click();
    });

如果实现的话, header 、本地存储和 Cookie 在大多数 headless 浏览器中的工作方式与在具有 GUI 的常规浏览器中的工作方式相同。 PhantomJS 和 HtmlUnit 支持所有这些功能。

在 PhantomJS 中,您还可以添加您自己的 cookie。例如,您可以从 chrome 复制 cookie,并在运行时以编程方式将其添加到 phantomjs 浏览器。它将自动添加到特定域的页面请求中。

在加载页面之前向页面添加 cookie

var webPage = require('webpage');
var page = webPage.create();

phantom.addCookie({
  'name'     : 'Valid-Cookie-Name',   /* required property */
  'value'    : 'Valid-Cookie-Value',  /* required property */
  'domain'   : 'localhost',
  'path'     : '/',                /* required property */
  'httponly' : false,
  'secure'   : false,
  'expires'  : (new Date()).getTime() + (1000 * 60 * 60)   /* <-- expires in 1 hour */
});
page.open('localhost', function (status) {
//Cookie automatically added to request headers for localhost
...
});

有关使用 PhantomJS 的一些可运行示例,请参阅 The phantomjs examples page

关于browser - 普通浏览器和 headless 浏览器的区别,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33098210/

相关文章:

javascript - 移动浏览器和 JavaScript

android - 如何在 android web 浏览器中获取所选超链接的 URL?

javascript - 在 WebDriverJs 中选择下拉列表

Python - 如何将 selenium 与代理一起使用

java - 当尝试将 selenium 项目转换为 Maven 项目时..向我显示 byte buddy.jar 错误

javascript - 我可以为我的网站访问者启用 JavaScript 吗?

session - 如何让两个浏览器窗口共享相同的 "session"?

node.js - 带 Puppeteer 的 Headless Chromium 不适用于 Amazon Linux AMI

java - Htmlunit 中每台服务器的最大连接数?

javascript - 具有屏幕截图功能的 headless node.js javascript 浏览器?