gpt4 book ai didi

javascript - 从评估()中处理提交的响应

转载 作者:行者123 更新时间:2023-11-28 07:30:32 26 4
gpt4 key购买 nike

我正在使用 PhantomJS 抓取页面,但遇到了问题。这是它执行的基本用户步骤;

  1. 加载登录页面(使用page.open)
  2. 输入凭据(在传递给 open 的回调中使用 page.evaluate)
  3. 提交表单(也在 page.evaluate 中)

当我在浏览器中执行用户步骤时,提交表单发出的 POST 请求会在 header 中返回几个设置 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 中的一个错误吗?看来,如果我的工作流程需要提交表单,它就无法正确模拟浏览器(响应被忽略/我无法访问它)。

最佳答案

PhantomJS 的工作方式与任何其他浏览器一样。应设置 Cookie。

表单提交至少需要一次往返来设置 cookie,但 form.submit() 不会等待请求得到答复。它立即返回。当您随后访问 page.cookies 时,它根本不会更新。

使用setTimeout()等待一会儿,然后再循环page.cookies

<小时/>

PhantomJS 1.x 背后的 WebKit 引擎已有 4 年多的历史。因此,请求可能会因错误或不兼容而被丢弃。您可能需要更新到 PhantomJS 2。

查看是否有问题注册到onConsoleMessage , onError , onResourceError , onResourceTimeout事件。

关于javascript - 从评估()中处理提交的响应,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29173885/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com