评估中的phantomjs getElementsByClass()无法获取元素

时间:2017-03-19 13:22:39

标签: javascript phantomjs

我花了很多时间来解决这个问题。 下面是我的phantomjs代码

var page = require('webpage').create()

page.open("https://www.google.com.hk/",function(status){
    if(status === 'success'){
        var aa = page.evaluate(function() {
            return document.getElementsByClassName('ctr-p').length
        })
        console.log(aa)
    }
    phantom.exit(0)
})

正如您所看到的,在evaluate函数返回值document.getElementsByClassName(' ctr-p')。长度,当我将其复制到将打印的Chrome Inspect控制台' 3&#39 ;,如下图所示: enter image description here 但是当我执行phantomjs代码时,结果是' 0'! enter image description here

这有什么不对?请〜

2 个答案:

答案 0 :(得分:3)

Google认为PhantomJS'默认的useragent并认为它是某种过时的移动浏览器:

enter image description here

添加现代用户将解决问题。另请参阅以下代码示例以获取其他建议:

var page = require('webpage').create()

// Let's pretend we're Chrome 51
page.settings.userAgent = 'Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/51.0.2704.106 Safari/537.36';

page.open("https://www.google.com.hk/",function(status){
    if(status === 'success'){
        var aa = page.evaluate(function() {
            return document.getElementsByClassName('ctr-p').length
        })
        console.log(aa)

        // Make screenshots often to confirm 
        // everything is what you're thinking it is
        page.render("googlehk.jpg");

        phantom.exit() // 0 = success exit code
    }
    else {
        phantom.exit(1); // 1 = error exit code
    }


})
  

3

答案 1 :(得分:0)

所以我为phantomjs的初学者提供一些建议。如果你想通过网站上的phantomjs获取元素。你必须检查你的网站是否被访问登录。 大多数网站将根据您的浏览器cookie登录默认值。但是使用phantomjs,它就不会发生。原因是你没有设置cookie。这就是为什么我的问题来到这里。