【问题标题】:Click on an dropdown menu单击下拉菜单
【发布时间】:2018-07-07 12:29:50
【问题描述】:

您好, 我目前正在开发基于 Nodejs 的 Javascript,我使用 Puppeteer 作为抓取网络的帮助。正如您在标题中看到的那样,我正在尝试单击下拉菜单项,如果您输入不同的内容,下拉菜单会发生变化。首先是我的代码:

// Navigate to the Homepage
    await page.goto('https://www.futbin.com/');

await page.click('#player_search');
await page.keyboard.type(playerName);
await page.keyboard.press('ArrowDown');
await page.keyboard.press('ArrowDown');

// Create a screenshot
await page.screenshot({
    path: 'screenshot.png'
});

所以基本上我做截图只是为了证明无头浏览器做正确的事。

该网站是futbin,如果您想了解他们的网站如何运作并查看检查,我认为这会有所帮助。

但我真正的问题是,通常当你按下回车键时,你会直接进入播放器页面(我想去的地方)。但是在我的脚本之后总是出现错误“没有目标”。所以keyboard.press('Enter') 不起作用。 SO的其他建议也对我不起作用,因为下拉菜单不是原生的,也没有计算索引。

我真的很感激一些建议!

最后,我也想留下下拉列表第一行的 html 代码,但我从来没有工作过,所以如果你能看看这个网站,我将不胜感激!

【问题讨论】:

    标签: javascript jquery html node.js puppeteer


    【解决方案1】:

    您非常接近,您不需要使用箭头,因为您可以找到该项目以单击另一种方式。秘诀是在下拉列表调用 api 端点时添加waitForSelector。在我们截取屏幕截图之前,还要注意要渲染的最后一页上的waitForSelector

    因此只需这样做:-

    const puppeteer = require('puppeteer'); 
    
    async function run() {
    
      const browser = await puppeteer.launch( {
          headless: false
      }); 
    
      const page = await browser.newPage(); 
      await page.goto('https://www.futbin.com/');
    
      await page.type('#player_search', "Dave");
      await page.waitForSelector("ul li a[data-id]");
    
      await page.click("ul li a[data-id]");
    
      await page.waitForSelector('#cal');
    
      await page.screenshot( { path: "./dave.png"});
    
      await browser.close();
    }; 
    
    run(); 
    

    编辑补充 要选择任何索引,请使用:-

    let index = 3;
    let selector = "ul li:nth-child(" + index +") a[data-id]"
    await page.click(selector);
    

    这将转到下拉列表中的第三项。高温

    【讨论】:

    • 你好!非常感谢 !我也让它和我的尝试一起工作(它只需要暂停足够长的时间来加载,就像你说的那样),但是你的改进了我的脚本需要的时间!另一个问题:你看到了下拉菜单,我怎么能点击下一个下拉菜单? (所以第二个)因为我想让它可变。在此先感谢:)
    • 在你的情况下,我怀疑你可以做到await page.click("ul li:nth-child(2) a[data-id]");
    • 再一次,这条评论对我有很大帮助,但我实际上是指下一个孩子,因为它不会编译 ("ul li:nth-child("+Index+") a[data-id]")。我必须让它动态工作。我找到了将索引放入它自己的 () 和我正在尝试的确切方法的解决方案。错误总是:Refferenece_error with index。
    • 嘿,很高兴我能帮上忙,老实说,如果你遇到困难,也许你应该问一个新问题,因为你与原来的有点不同(不过不用担心)
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-11-03
    • 2021-11-17
    • 2019-04-18
    相关资源
    最近更新 更多