【问题标题】:Submit a form using Casperjs使用 Casperjs 提交表单
【发布时间】:2017-03-01 14:10:31
【问题描述】:

我尝试了 casperJS 中的各种方法来填写和提交表单。代码如下所示。最终,我正在构建一个机器人来自动检查 IAG Cargo 门户网站上的货运空运单的状态。

Sendkeys 会填写表格,但我无法点击搜索按钮。

使用 casperJS 的表单填充方法根本不起作用。

这是一个不寻常的网站还是我做错了什么?

在下面的代码中,程序似乎在线失败

this.clickLabel('SEARCH', 'button');

并且后面的代码没有运行。

(我在此示例中使用了一个虚拟的空运单号,因此最后一页将显示“未找到空运单”)

    var casper = require('casper').create();

var x = require('casper').selectXPath;

phantom.cookiesEnabled = true;

casper.userAgent('Mozilla/4.0 (compatable; MSIE 6.0; Windows NT 5.1)');

casper.start('https://www.iagcargo.com/iagcargo/portlet/en/html/601/main/search');

casper.waitForSelector("#awb_cia", function() {

    this.echo('Selector found');
    casper.capture('iag_start.png');

    this.sendKeys('#awb_cia','125');
    this.sendKeys('#awb_cod','12345675');

});

casper.then(function step2() {

    this.clickLabel('SEARCH', 'button');

    this.echo('this is step 2');    

    casper.capture('iag_end.png');
    });


require('utils').dump(casper.steps.map(function(step) {
    return step.toString();
}));


casper.run();

【问题讨论】:

    标签: casperjs


    【解决方案1】:

    无法点击是一个常见问题,可能有多种原因。 clickLabel() 在这里不起作用,因为它不是按钮标签,而是输入标签。这是我在页面上看到的:

    你可以试试这个, casper.click('input[value="Search"]');

    一般来说,您可以在单击元素时尝试以下操作。

    1. 尝试更改 viewportSize,例如 viewportSize:{宽度:1024,高度:768}

    这是因为,casperjs 不会点击页面上不可见的任何内容。

    1. 如果使用 xpath 选择器,请尝试使用 CSS。 XPath 选择器很脆弱,并且在所有浏览器中的工作方式不同。

    2. 有时 jquery click 有效,例如

      casper.evaluate(函数(){ var element = document.querySelector('span.control.critical.closer'); $(元素).click(); });

    3. 如果按钮标签内有函数,则可以直接调用该函数。例如。 搜索 您可以直接调用该函数, casper.someFunc();

    【讨论】:

      【解决方案2】:

      var casper = require('casper').create({
        verbose: true,
        logLevel: "debug",
        waitTimeout: 60000,
        resourceTimeout: 10000,
        viewportSize: {
          width: 1024,
          height: 768
        },
        pageSettings: {
          javascriptEnabled: true,
          loadImages: true,
          loadPlugins: true
        }
      });
      
      var x = require('casper').selectXPath;
      
      phantom.cookiesEnabled = true;
      
      casper.userAgent('Mozilla/4.0 (compatable; MSIE 6.0; Windows NT 5.1)');
      
      casper.start('https://www.iagcargo.com/iagcargo/portlet/en/html/601/main/search');
      
      casper.waitForSelector("#awb_cia", function() {
      
        this.echo('Selector found');
        casper.capture('iag_start.png');
      
        this.sendKeys(x('//*[@id="awb_cia"]'),'125');
        this.sendKeys('#awb_cod','12345675');
        this.capture('iag_middle.png');
      
      });
      
      casper.then(function step2() {
      
        if(this.exists('body > div.cuerpo > div.cuerpo > div.contenido > div > form > table > tbody > tr > td:nth-child(3) > input')){
      
          this. click('body > div.cuerpo > div.cuerpo > div.contenido > div > form > table > tbody > tr > td:nth-child(3) > input');
      
        }
      
      
      });
      casper.then(function step3() {
        this.echo('this is step 2');
      
        casper.capture('iag_end.png');
      });
      
      //require('utils').dump(casper.steps.map(function(step) {
      //   return step.toString();
      //}));
      
      
      casper.run();

      【讨论】:

      • 这适用于您需要使用完整扇区路径并单击
      猜你喜欢
      • 2015-11-20
      • 2018-07-31
      • 1970-01-01
      • 1970-01-01
      • 2015-03-31
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多