Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/433.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript PhantomJS和CasperJS单击链接并获取html_Javascript_Ajax_Phantomjs_Casperjs_Scraper - Fatal编程技术网

Javascript PhantomJS和CasperJS单击链接并获取html

Javascript PhantomJS和CasperJS单击链接并获取html,javascript,ajax,phantomjs,casperjs,scraper,Javascript,Ajax,Phantomjs,Casperjs,Scraper,我被CasperJS脚本困住了: var casper = require('casper').create(); var fs=require('fs'); casper.start('http://int.soccerway.com/national/switzerland/super-league/20152016/regular-season/r31601/matches/?ICID=PL_3N_02', function() { this.wait(2000, function(

我被CasperJS脚本困住了:

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

casper.start('http://int.soccerway.com/national/switzerland/super-league/20152016/regular-season/r31601/matches/?ICID=PL_3N_02', function() {
  this.wait(2000, function() {
    fs.write("swiss.html", this.getHTML() );

  });
  this.wait(2000, function() {
    var evObj = document.createEvent('Events');
    evObj.initEvent('click', true, false);
    document.getElementById('page_competition_1_block_competition_matches_6_previous').dispatchEvent(evObj);
  });
  this.wait(2000, function() {
    fs.write("swiss2.html", this.getHTML() );   
  });
});

casper.run();
我想打开代码中的链接,然后单击“上一步”并获取页面的html(我想获取一个包含每个比赛结果的完整赛季的html文档)

我做错了什么?(我是新手)


谢谢。

脚本几乎正确。唯一的错误是与页面交互时(单击“上一步”按钮)

您无法从脚本内部访问页面元素,必须在打开的网页上下文中计算(“注入”)该代码。在CasperJS中,有这样一个函数

var casper=require('casper').create();
var fs=需要('fs');
卡斯珀,开始http://int.soccerway.com/national/switzerland/super-league/20152016/regular-season/r31601/matches/?ICID=PL_3N_02,函数(){
this.wait(2000,function(){
write(“swiss.html”,this.getHTML());
});
this.wait(2000,function(){
//此函数内部的代码将运行
//就好像它被放置在目标页面中一样。
casper.评估(功能(术语){
var evObj=document.createEvent('Events');
evObj.initEvent('click',true,false);
var prev_link=document.getElementById('page_competition_1_block_competition_matches_6_previous');
prev_link.dispatchEvent(evObj);
});
});
this.wait(2000,function(){
write(“swiss2.html”,this.getHTML());
});
});
casper.run();
或者,不使用casper.evaluate,只需编写

this.click('#page_competition_1_block_competition_matches_6_previous');

正如Artjom B.所建议的那样。

您试图在页面上下文之外使用DOM,这是不可能的。不管怎样,你为什么不使用CasperJS的点击功能呢<代码>casper。单击(选择器)感谢您100%的工作!;)