无法在casperjs中使用xpath获取元素

时间:2012-12-28 10:55:02

标签: javascript phantomjs casperjs

我正在使用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\"]"}

2 个答案:

答案 0 :(得分: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代码,转而使用向后兼容代码。

答案 1 :(得分: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进行测试