木偶删除屏幕截图的元素

时间:2020-10-06 13:12:51

标签: html node.js dom puppeteer

我正在尝试截取页面的屏幕截图,但是由于某些脚本的缘故,cookies页面排在了前面(我的软件应该在任何网站上,所以我无法提供HTML)。

事情是在puppeteer中删除无法正常工作,我需要一些帮助。

            await this.sleep(5 * 1000);
            let body = await browserPage.evaluate(() => {
                document.querySelectorAll('#didomi-popup')[0].outerHTML = "";
                return document.documentElement.outerHTML;
            });
            await browserPage.screenshot({path: "test.jpg", fullPage: true});

所以存在didomi-popup,我什至在chrome控制台上尝试 document.querySelectorAll('#didomi-popup')[0].outerHTML = "";并删除了元素。 等待似乎也很好,因为cookie的弹出窗口位于该页面的主体中。评估返回值。

有人有想法吗?

非常感谢

2 个答案:

答案 0 :(得分:0)

尝试一下:

await page.goto('<url_here>');

let div_selector_to_remove= ".xj7.Kwh5n";
await page.evaluate((sel) => {
    var elements = document.querySelectorAll(sel);
    for(var i=0; i< elements.length; i++){
        elements[i].parentNode.removeChild(elements[i]);
    }
}, div_selector_to_remove)

答案 1 :(得分:0)

通过尝试其他操作,我认为弹出窗口不断返回到屏幕截图,因此我还删除了Javascript中的所有脚本以防止它出现,现在它可以正常工作

此代码删除了弹出窗口和脚本,然后在没有脚本的情况下设置了网页,因此该页面对于屏幕截图而言是静态的。

            let body = await browserPage.evaluate(() => {
                const deleteElement = function(selector) {for (let i = 0; i < selector.length; i++) {selector[i].outerHTML = "";}} 
                const elemToDelete = ["#didomi-popup", "script"];
                for (let i = 0; i < elemToDelete.length; i++) {
                    deleteElement(document.querySelectorAll(elemToDelete[i]))
                }
                return document.documentElement.outerHTML;
            });
            await browserPage.setContent(body)
            await browserPage.screenshot({path: path, fullPage: true});

对于其他人,我知道删除脚本可能是一个问题,但是我在评估之前等待了7秒钟,所以我只想为网页拍照而不做任何改动,因此对我来说效果很好! / p>