无法使我的脚本继续单击按钮

时间:2018-10-24 19:38:06

标签: javascript node.js web-scraping puppeteer

我已经使用node.jspuppeteer关联创建了一个脚本,以点击位于底部的 more 按钮网页以从其目标网页中挖掘出所有标题。

问题是当我执行脚本时,它只单击一次,然后退出。我如何继续单击该按钮,直到没有更多按钮需要单击,这意味着所有链接都被显示出来?

到目前为止我的尝试:

const puppeteer = require("puppeteer");

(async function main() {
    const browser = await puppeteer.launch({headless:false});
    const page = await browser.newPage();
    await page.goto("https://www.newsnow.co.uk/h/Sport/Football/Championship/Transfer+News", {waitUntil: 'networkidle2'});
    await page.waitForSelector("[class^='hl_more']");
    await page.click("[class^='hl_more']");
    await browser.close();
})();

由于我是node.jspuppeteer的新手,所以我不明白如何定义一个循环来完成任务。

2 个答案:

答案 0 :(得分:2)

在这种情况下,我经常做的是使用SharedPreference块使用try catch并使用非常短的超时来检查元素的可见性。您需要waitForSelector块,因为当该更多按钮不再可见时,try catch最终将超时。这也是为什么您需要使用短而特定的超时的原因,因为您在尝试查找组件时不希望代码暂停30秒(默认超时)。

所以我要做的是:

waitForSelector

答案 1 :(得分:0)

只需添加一个使单击的命令循环,例如:

const puppeteer = require("puppeteer");

(async function main() {
    const browser = await puppeteer.launch({headless:false});
    const page = await browser.newPage();
    await page.goto("https://www.newsnow.co.uk/h/Sport/Football/Championship/Transfer+News", {waitUntil: 'networkidle2'});
    await page.waitForSelector("[class^='hl_more']");
    while (1) { // This one
        await page.click("[class^='hl_more']");
    }
    await browser.close();
})();

Various loop types in JavaScript