Phantomjs:包含jquery来隐藏或点击元素

phantomjs: include jquery to hide or click element

本文关键字:元素 隐藏 包含 jquery Phantomjs      更新时间:2023-09-26

我试图从以前隐藏的cookie策略的网页截图。比如:

var webPage = require('webpage');
var page = webPage.create();
page.viewportSize = { width: 375, height: 667 };
page.settings.userAgent = 'Mozilla/5.0 (iPhone; CPU iPhone OS 8_0_2 like Mac OS X) AppleWebKit/600.1.4 (KHTML, like Gecko) Version/8.0 Mobile/12A366 Safari/600.1.4';
page.onConsoleMessage = function (msg, line, source) {
    console.log('console> ' + msg);
};
var fs = require('fs');
page.open('https://www.twitter.com/mmarkmiller/status/714525180668850176', function(status) {
    console.log('Status: ' + status);
    page.includeJs('https://ajax.googleapis.com/ajax/libs/jquery/1.8.2/jquery.min.js', function() {
        (page.evaluate(function() {
            console.log('Evaluating!');
            // jQuery is loaded, now manipulate the DOM
            var $button = $('div[jsnamespace="EuCookieSheet"]');
            $button.hide();
        }));
    });
    fs.write('test.html', page.content, 'w');
    page.render('teto.png');
    phantom.exit();
});

但是我没有在控制台日志中显示"正在评估!"文本,并且呈现的html和png文件都有可见的cookie策略。我看到jquery包含在保存的html正文的末尾,但似乎页面。计算部分不工作

我还能错过什么?

谢谢!

Jquery已经存在,打开浏览器控制台并执行$。因此,您的回调page.includeJs将无法工作。你已经可以在这里使用jquery了,在evaluate context里面。

还有:没有像div[jsnamespace="EuCookieSheet"]这样的css选择器,你可以在纯js上做你想做的:

function click(sel){var event=document.createEvent('MouseEvents');event.initMouseEvent('click',1,1,window,1,0,0,0,0,0,0,0,0,0,null);document.querySelector(sel).dispatchEvent(event);}
var webPage = require('webpage');
var page = webPage.create();
page.viewportSize = { width: 375, height: 667 };
page.settings.userAgent = 'Mozilla/5.0 (iPhone; CPU iPhone OS 8_0_2 like Mac OS X) AppleWebKit/600.1.4 (KHTML, like Gecko) Version/8.0 Mobile/12A366 Safari/600.1.4';
page.onConsoleMessage = function (msg, line, source) {
    console.log('console> ' + msg);
};
var fs = require('fs');
page.open('https://www.twitter.com/mmarkmiller/status/714525180668850176', function(status) {
    console.log('Status: ' + status);
        page.evaluate(function(click){
       console.log('Evaluating!');
        document.querySelector('div[jsnamespace="EuCookieSheet"]').style="display: none;"
        },click);
    fs.write('test.html', page.content, 'w');
    page.render('teto.png');
  phantom.exit();
})