phantonjs 上的点击自动化不起作用

The click automation on phantonjs is not working

官方关于点击phantomjs的例子不起作用: http://phantomjs.org/page-automation.html

我试过如下:

function sleep(milliseconds) {
  var start = new Date().getTime();
  while (true) {
    if ((new Date().getTime() - start) > milliseconds) { break; }
  }
}

var page = require('webpage').create();
page.open('http://example.com/', function() {
  page.includeJs("http://ajax.googleapis.com/ajax/libs/jquery/1.6.1/jquery.min.js", function() {
    page.evaluate(function() {
      $("a").click();
    });
    sleep(3000);
    page.render('screenshot.png');
    phantom.exit()
  });
});

但我得到了 http://example.com/, instead of https://www.iana.org/domains/reserved(点击的目标)的屏幕截图。

如何解决?

我不确定 jQuery 如何处理点击,但通过 vanilla JS 访问元素并且 "clicking" 它会起作用:

page.open('http://example.com/', function() {
    page.evaluate(function() {
        document.querySelector("a").click();
    });
});

等待任意时间段是不可靠的,最好使用每次页面加载完成时触发的回调:

page.onLoadFinished = function(){

    // What page are we currently on?
    var url = page.evaluate(function(){
        return document.location.href;
    });

    console.log(url);

    if(url.indexOf("iana") !== -1)
    {
        page.render('example.png');
        phantom.exit();
    }
}

关于 PhantomJS 的强制性注意事项:如果可以,请考虑迁移到 puppeteer 或任何其他现代无头解决方案,因为 PhantomJS 已经非常过时并且将越来越难以维护未来的股票