【问题标题】:Handle the response of a submit from within evaluate()从 evaluate() 处理提交的响应
【发布时间】:2015-05-24 07:07:01
【问题描述】:

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

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


    【解决方案1】:

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

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

    使用setTimeout() 稍等片刻,然后再循环page.cookies


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

    查看注册onConsoleMessageonErroronResourceErroronResourceTimeout事件是否有问题。

    【讨论】:

    • 这种解释对我来说很有意义,但是我以前见过类似的解释,即使我在提交发生 30 秒后检查我的 cookie,我仍然错过了它的响应设置的两个。
    • 你能检查他们是否也没有在phantom.cookies中列出吗?
    • 是的,很遗憾,cookie 的幻像对象集与页面对象相同。
    • 事件处理程序是否出现了问题?您应该确保页面在提交后实际加载。您可以注册到page.onResourceRequestedpage.onResourceReceived。你也可以用page.render()截图。
    • 我有你提到的事件处理程序以及其他几个,但他们什么也没发现。我将尝试 page.render() 以及 onResourceRecieved 中的一些其他代码
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-11-18
    • 1970-01-01
    • 2012-04-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多