当前位置: 首页 > 知识库问答 >
问题:

Puppeteer打开下拉菜单,然后点击[1,2,3,RD…]选项

卜泓
2023-03-14

https://www.nhtsa.gov/ratings

我一直试图让木偶从下拉菜单中选择一个选项,所以我可能会从上面的网站刮出信息。

2.我还想知道如何选择第2个、第3个和第4个选项,而不需要硬编码。

我甚至还没有开始搜集信息/sad;(

const puppeteer = require('puppeteer');

async function spider() {
    try {
        let browser = await puppeteer.launch({ headless: false});
        let page = await browser.newPage();
        await page.goto('https://www.nhtsa.gov/ratings');
        await page.click('a[data-target=".manufacturer-search-modal"]');
        await page.click('select');
        await page.click('option[value="AUDI"]');

    } catch(error) {
        console.log(error)
        await browser.close();
    }
}

export default spider

共有1个答案

南门鸿哲
2023-03-14

我认为有几个问题。第一,有时页面会弹出一个调查,你可能需要先关闭它。第二,在单击.manufacturer-search-modal链接和尝试与select框交互之间需要等待一段时间,因为框中的选项不会立即填充(可能是向服务器发出请求以获取选项列表)。第三,我认为选择框有点特别,点击它们不起作用,但你可以使用Page.select代替。把这些都放在一起,再加上一些按数字选择项目的难看代码:

async function spider() {
    try {
        let browser = await puppeteer.launch({ headless: false});
        let page = await browser.newPage();
        await page.goto('https://www.nhtsa.gov/ratings');
        try {
          // Give the 'take our survey' box a chance to pop up, and close it if it does
          await page.waitFor('.acsCloseButton', { timeout: 1000 });
          await page.click('.acsCloseButton')
        } catch {

        }
        await page.click('a[data-target=".manufacturer-search-modal"]');
        // wait for the options to be populated
        await page.waitFor('option:nth-child(2)');
        // search for AUDI
        await page.select('select', 'AUDI');
        await page.click('.manufacturer-search-submit');
        // select third element in drop-down
        // there's probably a better way to do this
        const options = await page.$$('option');
        const properties = await options[2].getProperties();
        const value = await properties.get('_value').jsonValue();
        await page.select('select', value);
        await page.click('.manufacturer-search-submit');
    } catch(error) {
        console.log(error)
        await browser.close();
    }
}
 类似资料:
  • 我想让木偶演员从下拉框中选择使用: await Page.Select(选择器,值); 这里是方法,如何我想要得到的选项。 等待页面。选择('#dropdown','//select[@id=“dropdown”]//option[contains(@value,“xxa1”)]'); puppeteer中的“values”可能不能替换为xpath参数。CMIIW.但我能用另一种方法解决吗? 任何

  • 本文向大家介绍BootStrap 下拉菜单点击之后不会出现下拉菜单(下拉菜单不弹出)的解决方案,包括了BootStrap 下拉菜单点击之后不会出现下拉菜单(下拉菜单不弹出)的解决方案的使用技巧和注意事项,需要的朋友参考一下 最近学到Bootstrap下拉菜单,学懂了教程内容之后自己敲一个点击按钮底下弹出下拉菜单的小demo,写完代码发现运行之后点击按钮没反应,下拉菜单弹不出来,对照教程感觉代码没错

  • 问题内容: 如果下拉菜单可见,并且我在下拉菜单外部单击,它将关闭。我需要它不关闭。 从文档中: 打开后,该插件还会添加 .dropdown-backdrop 作为单击区域,以在菜单外单击时关闭下拉菜单。 我可以添加什么JavaScript以防止下拉列表关闭? 问题答案: 从_Bootstrap_文档的事件部分: :调用hide实例方法后,立即触发此事件。 对于初学者来说,为了防止下拉菜单关闭,我们

  • 我想实现从网站上的下拉菜单中进行选择的功能,但我似乎无法找到要查询的正确选择器,这样它就可以从下拉菜单中随机选择一个项目。 https://www.slamjam.com/en_GB/man/footwear/sneakers/low/nike-running/air-tailwind-79-sneakers/j166713.html 我可以让它点击下拉列表,并带来库存大小,但我不能让它从下拉列表

  • 问题内容: 我需要建立一个包含5个选项的菜单,单击某个菜单后,将出现一个新的子菜单。我完全不知道该怎么做。 问题答案: CSS没有点击处理程序。因此,不可能使用标准CSS。您可以使用一种称为“复选框hack”的方法,但是我谦虚地认为,它有点笨拙,并且会像您的用例要求那样在导航菜单中使用,这很尴尬。因此,我建议使用jQuery或Javascript。这是使用jQuery的一种非常简单的解决方案。 基

  • 我想我的问题以前已经回答过很多次了,但是我找不到确切的我的案例。 我有一个垂直菜单和子菜单,我想显示子菜单,只有当父菜单被点击(不是悬停),一次只显示一个子菜单,在点击菜单的某个地方后,我想要子菜单消失。 这就是我现在得到的--它基于现在的悬停。我试着把a:hover改成类似a:active的东西,但它并不能很好地工作(我在CSS方面不是很好)。 有谁知道吗?