【问题标题】:How to use Apify SDK to automate selecting a javascript option to crawl a website如何使用 Apify SDK 自动选择 javascript 选项来抓取网站
【发布时间】:2019-07-16 11:21:02
【问题描述】:

我已阅读有关使用 Apify SDK 抓取网站的优秀文档,但需要一点帮助,因为 PuppeteerCrawler 指南尚未完成

我要抓取的网站部分是成员目录。主页(我相信我需要提供 RequestList)包含指向目录前 50 个成员的链接。为了获得接下来的 50 名成员,有一个如下所示的选项框:

<span id="foo">Show:<select onchange="bar.pagerChanged(this);">
<option value="0">1-50</option>
<option value="50">51-100</option>
<option value="100">101-150</option>
...
<option value="2400">2401-2450</option>
</select>
</span>

我不确定我会如何处理这个问题,除了我认为我需要 PuppeteerCrawler 考虑到用户输入(单击带有id="foo" 的选项)是必需的。我需要做的是从首页开始,将所有50个链接添加到RequestQueue,然后选择下一批50个成员,然后冲洗并重复。

【问题讨论】:

    标签: apify


    【解决方案1】:

    我不确定页面的详细信息,但您可以像这样使用 Puppeteer 轻松选择任何选项

    // First is selector to the select element and second is value of the option
    await page.select('#foo select', '50');
    

    在极少数情况下,这不起作用。然后可以通过直接单击选择然后通过简单地使用显示的元素之一来解决

    await page.click('#foo select');
    await page.waitFor(200);
    await page.click('selector-for-on-of-the-element-that-popped-up');
    

    如果每个选项里面都有链接,你可以做简单的lool

    const batchSize = 50;
    for (let i = 0; i < totalMembers; i += 50) {
        await page.select('#foo select', `${i}`); // i needs to be converted to a string
        const links = extractLinks(); // implement
        for (const url of links) {
            await requestQueue.addRequest({ url });
        }
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-03-22
      • 2011-09-13
      • 2022-11-30
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多