2

我正在尝试抓取使用 .aspx 文件或 ASP.net 的站点。有单选按钮,在每次点击时执行回发。

我现在知道 ASP.net 中的回发只是一个 POST 调用,但是有谁知道在 CasperJS 或 PhantomJS 中设置这个 POST 涉及什么?

我想它是这样的,但是我错过了复制回调的 POST。任何人都必须这样做并且可以提供一些见解,我们将不胜感激。

casper.start('target.aspx',function() {
    this.capture('Step1.png');
    this.test.assertExists('#ctl00_cphMainContent_ucUnifiedSearch_rdoOrg', 'PASS');
    this.click('input[name="ctl00$cphMainContent$ucUnifiedSearch$rdoSearchBy"][value="rdoOrg"]');    
});

casper.run(function() {
    this.echo('finished');
    this.capture('Step2.png');  
});

具体的目标输入标签和回发是:

<input id="ctl00_cphMainContent_ucUnifiedSearch_rdoOrg" type="radio" name="ctl00$cphMainContent$ucUnifiedSearch$rdoSearchBy" value="rdoOrg" onclick="javascript:setTimeout('__doPostBack(\'ctl00$cphMainContent$ucUnifiedSearch$rdoOrg\',\'\')', 0)">
4

1 回答 1

0

正如您所说,该页面对该页面进行 POST 调用。这是通过 javascript 完成的,casperjs 不会将其作为到下一页的过渡。因此,最后一步 ( run) 不会等待页面重新加载。您需要自己等待页面转换。

您可以通过等待仅存在于重新加载页面中的特定字段来执行此操作。在你的情况下,这将是

casper.waitForSelector('#ctl00_cphMainContent_ucUnifiedSearch_txtFirm');

所以生成的脚本是

casper.start('http://www.adviserinfo.sec.gov/IAPD/Content/Search/iapd_Search.aspx', function() {
    this.capture('Step1.png');
    this.click('input[name="ctl00$cphMainContent$ucUnifiedSearch$rdoSearchBy"][value="rdoOrg"]');    
});

casper.waitForSelector('#ctl00_cphMainContent_ucUnifiedSearch_txtFirm');

casper.run(function() {
    this.echo('finished');
    this.capture('Step2.png');  
});
于 2014-06-09T12:55:16.867 回答