Автоматизация кликов на phantonjs не работает - PullRequest
0 голосов
/ 12 января 2019

Официальный пример нажатия на фантоми не работает: 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 голосов
/ 14 января 2019

Я не уверен, как jQuery обрабатывает щелчки, но доступ к элементу через vanilla 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: если вы можете, подумайте о переходе на кукловод или любое другое современное безголовое решение, потому что PhantomJS уже очень устарел, и поддерживать скриптов будет все труднее и труднее будущее

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...