【问题标题】:The click automation on phantonjs is not workingphantonjs 上的点击自动化不起作用
【发布时间】:2019-01-11 23:34:24
【问题描述】:

关于点击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(点击的目标)。

如何解决?

【问题讨论】:

    标签: phantomjs


    【解决方案1】:

    我不确定 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 的强制性注意事项:如果可以,请考虑迁移到 puppeteer 或任何其他现代无头解决方案,因为 PhantomJS 已经非常过时了,将来维护脚本会越来越难 em>

    【讨论】:

    • 谢谢!我认为问题是我的虚拟睡眠功能不允许浏览器评估点击事件。
    • 感谢 puppeteer 链接。我目前正在将 Selenium 与 chromedriver 一起使用。我正在尝试 phantomjs 以避免在没有管理员帐户的情况下在无头 ubuntu 上安装 Chrome。不过我同意还是用chrome比较好,不要那么复杂:blog.testproject.io/2018/02/20/…
    猜你喜欢
    • 1970-01-01
    • 2016-01-30
    • 2016-12-23
    • 2016-03-11
    • 1970-01-01
    • 2020-01-06
    • 2016-06-30
    • 2021-10-16
    • 1970-01-01
    相关资源
    最近更新 更多