我试图从jQuery UI Datepicker日历中抓取日期信息。
日历有几天有可点击的链接。
我想要那些链接。
该日历适用于网站上的人类,但CasperJS无法访问其中的数据,即使casper.thenClick(...the xpath to the calendar...)
实际打开日历。
我的意思是,我可以通过做一个casper.capture(...)
来查看空日历。
使用Chrome,我可以找到我需要的XPath,没问题。
为什么我不能让CasperJS获取datepicker日历中的数据?
这是代码:
var casper = require('casper').create();
var utils = require('utils');
var x = require('casper').selectXPath;
casper.userAgent('Mozilla/5.0 (Windows; U; Windows NT 6.1; rv:2.2) Gecko/20110201');
casper.start('http://www.hawaiifoodtours.com/north-shore-food-tour/');
casper.then(function() {
// Click on 1st result link
this.click('#date_a6130');
console.log('clicked on calendar');
});
casper.wait(1000, function(){
casper.capture('theCalendar.png');
// this is the XPath Chrome gives me. No problem.
var stuff = casper.getElementsInfo(x('//*[@id="dp1444234738328"]/div/table/tbody'));
utils.dump(stuff);
});
casper.run();
我根据Artjom B的建议添加错误消息:
ResourceError: { "errorCode": 2, "errorString": "Connection closed", "url": "https://www.hawaiifun.org/reservation/common/jquery/css/ui-lightness-1.10.3.css" } ResourceError: { "errorCode": 2, "errorString": "Connection closed", "url": "https://www.hawaiifun.org/reservation/common/datepicker_availability.css" } clicked on calendar ResourceError: { "errorCode": 2, "errorString": "Connection closed", "url": "https://www.hawaiifun.org/reservation/companyservlet?callback=jQuery19102756042554974556_1444269910798&action=COMMON_AVAILABILITYCHECKJSON&activityid=6130&agencyid=0&blocksonly=false&year_months=2015_10&webbooking=true&hawaiifunbooking=false&agencybooking=false&minavailability=&_=1444269910799" } CasperError: Cannot get information from xpath selector: //*[@id="dp1444234738328"]/div/table/tbody/tr[5]/td[3]/a: no elements found.
运行代码后,我收到以下错误:
clicked on calendar
CasperError: Cannot get information from xpath selector: //*[@id="dp1444234738328"]/div/table/tbody: no elements found.
/home/user/phantomjs:/platform/casper.js:1173 in getElementsInfo
/home/user/phantomjs:/code/casperjs.js:17
/home/user/phantomjs:/platform/casper.js:2368 in _check
通过将XPath选择器更改为//*[@class="ui-datepicker-calendar"]/tbody
,我能够无错运行程序。
这是完整的工作计划:
var casper = require('casper').create();
var utils = require('utils');
var x = require('casper').selectXPath;
casper.userAgent('Mozilla/5.0 (Windows; U; Windows NT 6.1; rv:2.2) Gecko/20110201');
casper.start('http://www.hawaiifoodtours.com/north-shore-food-tour/');
casper.then(function () {
// Click on the 1st Result Link
this.click('#date_a6130');
this.echo('clicked on calendar');
});
casper.wait(1000, function () {
casper.capture('theCalendar.png');
// Updated XPath
var stuff = casper.getElementsInfo(x('//*[@class="ui-datepicker-calendar"]/tbody'));
utils.dump(stuff);
});
casper.run();
注意:我使用CasperJS 1.1.4和PhantomJS 2.1.1。