【问题标题】:CasperJS/PhantomJS - Browsing one page and send HTTP request to other resourceCasperJS/PhantomJS - 浏览一个页面并将 HTTP 请求发送到其他资源
【发布时间】:2015-07-02 05:35:07
【问题描述】:

我需要浏览一个页面,从中检索数据并通过 HTTP 请求将数据发送到我的服务。据我所知,CasperJS/PhantomJS 只能与一个 Web 资源同时工作。如何绕过这个限制?

UPD:我需要从 CasperJS/PhantomJS 端发出请求,而不是通过 evaluate() 从页面上下文发出请求。

【问题讨论】:

  • @Artjom B.:我不想使用 AJAX。
  • 你为什么有这个限制? AJAX 请求和其他请求一样。如果您不想这样,那么您需要打开该页面。
  • 我必须测试一个网络聊天应用程序并且也遇到了这个限制:casperjs 不能同时处理两个窗口。 Phantomjs 可以 做到,但 API 很笨重。于是我在 npm 和 github 上搜索了一下,发现了 horseman.js。与 casper 不同,horseman 是同步的,因此可以同时打开两个网页。最重要的是,如果您不想打开单独的“窗口”来操作另一个页面,那么 horseman.js 支持浏览器选项卡。
  • @slebetman CasperJS 完全可以打开another tab。它只是有点笨拙,在测试环境中不起作用。

标签: javascript http phantomjs casperjs headless-browser


【解决方案1】:

@Interloper - 为了能够执行此集成,您需要两个基本要求:

1 - 您的页面将被请求,必须具备通过 HTTP 访问控制 (CORS) 接收信息的能力。这将在很大程度上取决于您的应用程序的类型!例如,如果您在此项目中使用 C#,则必须在 system.webServer 的 web.config 中添加以下代码:

<httpProtocol>
    <customHeaders>
        <add name="Access-Control-Allow-Origin" value="*" />
        <add name="Access-Control-Allow-Headers" value="Content-Type" />
    </customHeaders>
</httpProtocol>

这样,您的项目/页面将被启用,以便您可以从任何其他域访问/交换信息...

2 - 所以你可以从任何域调用这个 URL,在我们的例子中,一个代码 CasperJS,你可以使用 AJAX (jQuery / JS) 执行 HTTP 调用,使用以下示例:

function get_response(output) {
    $.ajax({
        type: "POST",
        url: "URL",
        dataType: "text",
        async: false,
        data: { param1:value1 },
        success: function (response) {
            var $doc = $.parseXML(response);
            output($($doc).find('TagsXML').find('TAG_RESPONSE1')[0].textContent + '|' + $($doc).find('TagsXML').find('TAG_RESPONSE2')[0].textContent);
        },
        error: function (response) {
            output('');
        }
    });
}

get_response(function (output) {
    test.pass('output: ' + output);
    var VALUE1 = output.split('|')[0];
    var VALUE2 = output.split('|')[1].replace(/\n/g, "");
});

使用此代码,您可以执行“远程访问”和反馈信息(如果需要)

【讨论】:

  • 如果我无法更改执行 AJAX 请求的访问控制选项怎么办?我需要另一种方式。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2013-05-27
  • 1970-01-01
  • 1970-01-01
  • 2012-12-21
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多