phantonjs上的点击自动化无法正常工作

时间:2019-01-11 23:34:24

标签: phantomjs

有关单击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/的屏幕截图,而不是https://www.iana.org/domains/reserved(点击的目标)的屏幕截图。

如何解决这个问题?

1 个答案:

答案 0 :(得分:0)

我不确定jQuery如何处理点击,但是通过普通JS访问元素并“点击”它会起作用:

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已经过时了,将来将越来越难以维护笔迹