2

我正在使用 casperjs,以下是代码

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

casper.start('http://google.co.in/', function() {
    // search for 'casperjs' from google form
    this.test.assertExists(x('//*[@type="text"]'), 'the element exists');

});
casper.run(function() {
    // echo results in some pretty fashion
    this.echo('').exit();
});

尽管有很多,但它无法找到任何属性类型为文本的元素。

这是我得到的输出

FAIL the element exists
#    type: assertExists
#    subject: false
#    selector: {"type":"xpath","path":"//*[@type=\"text\"]"}
4

2 回答 2

4

众所周知,谷歌对机器人不友好。为了使其工作,您必须设置 UserAgent。

这是在 CasperJS-1.0.0 和 PhantomJS-1.8.0 下测试的

var casper = require('casper').create({
  pageSettings: {
    userAgent: 'Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.21 (KHTML, like Gecko) Chrome/25.0.1349.2 Safari/537.21'
  }
});
var x = require('casper').selectXPath;

casper.start('http://google.co.in/', function() {
  // search for 'casperjs' from google form
  this.test.assertExists(x('//*[@type="text"]'), 'the element exists');
  this.test.assertExists({
    type: 'xpath',
    path: '//*[@type="text"]'
  }, 'the element exists');
});

casper.run(function() {
  // echo results in some pretty fashion
  this.echo('').exit();
});

您可以访问http://whatsmyuseragent.com/以查看您当前的 UserAgent 是什么。

更新:删除 CasperJS-1.0.0 代码以支持向后兼容的代码。

于 2012-12-30T18:22:57.670 回答
2

与 hexid 类似的答案,但要设置用户代理,您需要先启动 casper(而不是相反):

var casper = require('casper').create({verbose: true});
var x = require('casper').selectXPath;

casper.start();
casper.userAgent('Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.21 (KHTML, like Gecko) Chrome/25.0.1349.2 Safari/537.21');

casper.thenOpen('http://google.co.in/', function() {
    // search for 'casperjs' from google form
    this.test.assertExists(x('//input[@type="text"]'), 'the element exists');
});

casper.run(function() {
    // echo results in some pretty fashion
    this.echo('').exit();
});

使用 PhantomJs 1.7.0 和 Casper 1.0.0-RC4 测试

于 2012-12-30T18:59:37.823 回答