【问题标题】:page.evaluate does not seem to happenpage.evaluate 似乎没有发生
【发布时间】:2018-01-24 15:08:31
【问题描述】:

根据主题,我的 page.evaluate 似乎没有运行。

crawler.crawlUrl = async function(url) {
    if (!url) {
        return;
    }
    const page = await crawler.browser.newPage();
    await page.goto(url);
    console.log('got to here');
    await page.evaluate(() => {
        const links2 = document.querySelectorAll('*');
        console.log('what');
        console.log(links2);
        return Promise.resolve(true);

    }).catch(function(er){
        console.log(er);
    });
}

crawler.crawlUrl('https://www.sundhed.dk');

运行此程序时,我最终将“到达此处”语句记录到终端,但没有其他任何反应。它只是永远存在。

【问题讨论】:

    标签: javascript async-await puppeteer


    【解决方案1】:

    试着等待一些东西回来!我的经验法则是每次我请求新资源(单击按钮,转到网址)时,我总是执行waitForXXX

    await page.goto(url);
    await page.waitForSelector("h1");
    

    您可能需要将 h1 替换为页面上确实存在的内容。

    View list of puppeteer selectors

    我创建了一个适合我的脚本:-

    试着等待一些东西回来!我的经验法则是每次我请求新资源(单击按钮,转到网址)时,我总是执行waitForXXX

    await page.goto(url);
    await page.waitForSelector("h1");
    

    您可能需要将 h1 替换为页面上确实存在的内容。

    View list of puppeteer selectors

    我创建了一个适合我的脚本:-

    'use strict'; 
    
    const puppeteer = require('puppeteer'); 
    
    async function run() {
    
        const browser = await puppeteer.launch( {
            headless: false //true
        }); 
    
        const page = await browser.newPage(); 
        await page.setViewport({ width:1024, height:800});
        await page.goto('https://www.sundhed.dk');
        await page.waitForSelector('h1');
    
        const innerText = await page.evaluate(() => {
            return document.querySelector("H1").innerText;
        });
    
        console.log(innerText);
    
        await browser.close(); 
    }; 
    
    run(); 
    

    【讨论】:

    • 不,都尝试了 await page.waitForSelector("a");并等待 page.waitForSelector("*");不同的时间,等待选择器是在 console.log 到达这里之前,仍然到达 console.log 但 page.evaluate 内没有任何内容运行。
    • 嗯,我想通了。我需要添加 page.on('console', msg => { console.log(msg); });获取控制台输出。
    • 啊,是的,问题标题误导了我。要从 dom 获取控制台日志,您需要创建事件 page.on(...)。但是说我建议从评估中返回您想要的内容并在主脚本中处理它。 HTH
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2019-09-29
    • 2012-06-12
    • 1970-01-01
    • 1970-01-01
    • 2012-08-07
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多