PhantomJS 方法
PhantomJS是一个可以在无需浏览器的情况下执行JavaScript的平台。为了实现这一点,使用了以下方法,用于添加Cookie、删除Cookie、清除Cookie、退出脚本、注入JS等。
我们将在本章节中详细讨论这些PhantomJS方法及其语法。类似的方法,如 addcookie 、 injectjs 存在于webpage模块中,将在后续章节中讨论。
PhantomJS公开了以下方法,可以帮助我们在无浏览器的情况下执行JavaScript:
- addCookie
- clearCookie
- deleteCookie
- Exit
- InjectJS
现在让我们通过示例详细了解这些方法。
addCookie
addCookie方法用于添加Cookie并存储在数据中。它类似于浏览器如何存储Cookie。它接受一个参数,该参数是一个具有所有Cookie属性的对象,语法如下所示:
语法
它的语法如下:
phantom.addCookie ({
"name" : "cookie_name",
"value" : "cookie_value",
"domain" : "localhost"
});
name、value和domain是要添加到addcookie函数的必需属性。如果cookie对象中缺少其中任何一个属性,该方法将失败。
- name - 指定 cookie 的名称。
-
value - 指定要使用的 cookie 的值。
-
domain - 应用该 cookie 的域。
示例
以下是 addcookie 方法的示例。
var page = require('webpage').create(),url = 'http://localhost/tasks/a.html';
page.open(url, function(status) {
if (status === 'success') {
phantom.addCookie({ //add name cookie1 with value = 1
name: 'cookie1',
value: '1',
domain: 'localhost'
});
phantom.addCookie({ // add cookie2 with value 2
name: 'cookie2',
value: '2',
domain: 'localhost'
});
phantom.addCookie({ // add cookie3 with value 3
name: 'cookie3',
value: '3',
domain: 'localhost'
});
console.log('Added 3 cookies');
console.log('Total cookies :'+phantom.cookies.length);
// will output the total cookies added to the url.
} else {
console.error('Cannot open file');
phantom.exit(1);
}
});
示例
a.html
<html>
<head>
<title>Welcome to phantomjs test page</title>
</head>
<body>
<h1>This is a test page</h1>
<h1>This is a test page</h1>
<h1>This is a test page</h1>
<h1>This is a test page</h1>
<h1>This is a test page</h1>
<h1>This is a test page</h1>
<h1>This is a test page</h1>
<h1>This is a test page</h1>
<h1>This is a test page</h1>
</body>
</html>
上面的程序生成如下 输出 .
Added 3 cookies
Total cookies :3
代码注释是自解释的。
clearCookies
该方法允许删除所有的cookie。
语法
其语法如下所示−
phantom.clearCookies();
这个概念的工作方式类似于在浏览器菜单中选择删除浏览器cookies。
示例
下面是一个 clearCookies 方法的示例。
var page = require('webpage').create(),url = 'http://localhost/tasks/a.html';
page.open(url, function(status) {
if (status === 'success') {
phantom.addCookie({ //add name cookie1 with value = 1
name: 'cookie1',
value: '1',
domain: 'localhost'
});
phantom.addCookie({ // add cookie2 with value 2
name: 'cookie2',
value: '2',
domain: 'localhost'
});
phantom.addCookie({ // add cookie3 with value 3
name: 'cookie3',
value: '3',
domain: 'localhost'
});
console.log('Added 3 cookies');
console.log('Total cookies :'+phantom.cookies.length);
phantom.clearCookies();
console.log(
'After clearcookies method total cookies :' +phantom.cookies.length);
phantom.exit();
} else {
console.error('Cannot open file');
phantom.exit(1);
}
});
a.html
<html>
<head>
<title>Welcome to phantomjs test page</title>
</head>
<body>
<h1>This is a test page</h1>
<h1>This is a test page</h1>
<h1>This is a test page</h1>
<h1>This is a test page</h1>
<h1>This is a test page</h1>
<h1>This is a test page</h1>
<h1>This is a test page</h1>
<h1>This is a test page</h1>
<h1>This is a test page</h1>
</body>
</html>
上述程序生成以下 输出 。
Added 3 cookies
Total cookies :3
After clearcookies method total cookies :0
deleteCookie
删除CookieJar中’name’属性与cookieName匹配的任何Cookie。如果删除成功,返回true;否则返回false。
语法
语法如下所示−
phantom.deleteCookie(cookiename);
让我们通过一个示例来理解 addcookie,clearcookies 和 deletecookie 。
示例
这里有一个示例来演示deleteCookie方法的使用:
文件:cookie.js
var page = require('webpage').create(),url = 'http://localhost/tasks/a.html';
page.open(url, function(status) {
if (status === 'success') {
phantom.addCookie({ //add name cookie1 with value = 1
name: 'cookie1',
value: '1',
domain: 'localhost'
});
phantom.addCookie({ // add cookie2 with value 2
name: 'cookie2',
value: '2',
domain: 'localhost'
});
phantom.addCookie({ // add cookie3 with value 3
name: 'cookie3',
value: '3',
domain: 'localhost'
});
console.log('Added 3 cookies');
console.log('Total cookies :'+phantom.cookies.length);
//will output the total cookies added to the url.
console.log("Deleting cookie2");
phantom.deleteCookie('cookie2');
console.log('Total cookies :'+phantom.cookies.length);
phantom.clearCookies();
console.log(
'After clearcookies method total cookies :' +phantom.cookies.length);
phantom.exit();
} else {
console.error('Cannot open file');
phantom.exit(1);
}
});
以上程序生成以下 输出 。
phantomjs cookie.js
Added 3 cookies
Total cookies :3
Deleting cookie2
Total cookies :2
After clearcookies method total cookies :0
exit
phantom.exit方法将退出它所启动的脚本。它使用指定的返回值退出程序。如果没有传递值,它将返回 ‘0’ 。
语法
它的语法如下:
phantom.exit(value);
如果你没有添加 phantom.exit , 那么命令行会认为执行还在进行中,不会完成。
示例
我们来看一个示例,以了解使用 exit 方法。
console.log('Welcome to phantomJs'); // outputs Welcome to phantomJS
var a = 1;
if (a === 1) {
console.log('Exit 1'); //outputs Exit 1
phantom.exit(); // Code exits.
} else {
console.log('Exit 2');
phantom.exit(1);
}
上述程序生成以下 输出 。
phantomjs exit.js
Welcome to phantomJs
Exit 1
任何在phantom.exit之后的代码都不会被执行,因为phantom.exit是一个结束脚本的方法。
injectJs
injectJs用于在phantom中添加 附加js 文件。如果在当前 目录librarypath 中找不到该文件,则会使用phantom属性(phantom.libraryPath)作为额外的路径追踪位置。如果文件添加成功,则返回 true ,否则返回 false ,表示无法定位该文件。
语法
其语法如下:
phantom.injectJs(filename);
示例
让我们来看一个示例,以了解如何使用 injectJs 。
文件名:inject.js
console.log(“Added file”);
文件名:addfile.js
var addfile = injectJs(inject.js);
console.log(addfile);
phantom.exit();
输出
命令 − C:\phantomjs\bin>phantomjs addfile.js
Added file // coming from inject.js
true
在上面的示例中, addfile.js 通过injectJs调用文件 inject.js 。当你执行addfile.js时,inject.js中的console.log会显示在输出中。它还会显示addfile变量为true,因为inject.js文件成功添加。