我经常遇到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/