【问题标题】:How do I make puppeteer click on link?如何让 puppeteer 点击链接?
【发布时间】:2021-01-20 15:24:32
【问题描述】:

我想用 puppeteer 制作一个刮板,它可以打开一个网站,使用它的搜索栏并打开第一个链接。

那是代码:

const puppeteer = require('puppeteer');
    
 (async () => {
    let browser = await puppeteer.launch();
    let page = await browser.newPage();
    await page.goto('https://example.com', {waitUntil: 'networkidle2'});
        
     await page.click('[name=query]');
    await page.keyboard.type("(Weapon)");
    await page.keyboard.press('Enter');
    await page.waitForSelector('div[class="search-results"]', {timeout: 100000});
});

问题是我无法从搜索结果中打开第一个链接,我尝试使用 page.click() 但所有搜索结果都相同,除了 URL。

我想知道的是如何让它从搜索结果中打开第一个链接。

【问题讨论】:

    标签: javascript puppeteer


    【解决方案1】:

    还有更多方法可以解决这个问题。我建议您尝试一下,以便您学习不同的方法。

    await page.click('.search-results a');
    

    事实证明 Puppeteer 总是点击它找到的第一个元素,所以如果你想要第一个元素,这就足够了。

    或者你可以选择所有链接然后点击第一个:

    const resultLinks = await page.$$('.search-results a');
    resultLinks[0].click();
    

    最好在此处也包含一个条件,这样就不会因为找不到元素而导致错误:

    const resultLinks = await page.$$('.search-results a');
    if (resultLinks.length) resultLinks[0].click();
    

    还有更多方法,想了解更多,请参考API documenttion

    【讨论】:

    • 它没有点击链接,我想我知道为什么在搜索结果下面有项目元素,在每个元素下面都有一个标题元素,其中是链接,做什么我愿意吗?
    • 我在我的网站上对其进行了测试,我很确定它确实点击了第一个链接。但是,该站点现在搜索时会显示一些错误(超时),因此您实际上永远不会得到结果。另外,您需要学习如何调试代码,以便验证它是否有效。以非无头模式运行脚本是一个好的开始。
    • 如何在非无头模式下运行?
    • 方法puppeteer.launch()可以接受选项对象作为第一个参数,所以你可以传入{ headless: false }。请参阅我链接的文档:github.com/puppeteer/puppeteer/blob/main/docs/…
    • 是的,我知道您帮助了我的问题,我非常感谢,如果我发现自己无法解决它,我会在这里发布另一个问题。
    猜你喜欢
    • 1970-01-01
    • 2019-02-12
    • 1970-01-01
    • 2018-05-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多