【发布时间】:2015-05-24 07:07:01
【问题描述】:
我正在使用 PhantomJS 抓取页面并遇到问题。这是它正在执行的基本用户步骤;
- 加载登录页面(使用 page.open)
- 输入凭据(在传递给 open 的回调中使用 page.evaluate)
- 提交表单(也在 page.evaluate 中)
当我在浏览器中执行用户步骤时,提交表单所发出的 POST 请求会在标题中返回几个 set-cookie,这些 cookie 对于一些后续请求是必需的。当 PhantomJS 执行这些操作时,cookie 无法设置为证明;
page.open(loginUrl, function (status) {
if (status === 'success') {
//evaluate account and pwd to login
page.evaluate(function (email, password) {
console.log("Email: " + email);
console.log("Pass: " + password);
document.querySelector('input[name="theAccountName"]').value = email;
document.querySelector('input[name="theAccountPW"]').value = password;
document.querySelector('form').submit();
return;
}, email, password);
}
for (var i = 0; i < page.cookies.length; i++)
console.log(JSON.stringify(page.cookies[i]) + "\n");
上面的代码将打印 8 个必要的 cookie 中的 6 个,缺少的两个是我正在使用评估的提交返回的那些。无论如何可以访问该响应?为什么它返回的 cookie 没有被设置?这仅仅是 PhantomJS 中的一个错误吗?如果我的工作流程需要提交表单,它似乎无法正确模拟浏览器(响应被忽略/我无权访问它)。
【问题讨论】:
标签: javascript phantomjs