【问题标题】:pupppeteer js element not clicking even thou it is available in consolepuppeteer js 元素没有点击,即使它在控制台中可用
【发布时间】:2020-05-14 09:01:33
【问题描述】:

我在 html 中有以下元素。

<a title="Download photo" href="https://example.com/photos/GXqvtQh1N9A/download?force=true" rel="nofollow" download="" target="_blank" class="_1QwHQ _1l4Hh _1CBrG _1zIyn xLon9 _1Tfeo _2L6Ut _2Xklx"><svg class="Apljk _11dQc" version="1.1" viewBox="0 0 32 32" width="32" height="32" aria-hidden="false"></a>

在 Chromium 打开时从控制台。 我可以这样查询:

document.querySelector('a[title="Download photo"]');

我可以创建对它的引用:

var link = document.querySelector('a[title="Download photo"]');

然后我可以像这样点击它:

link.click();

我在 Puppeteer.js 的代码中尝试了同样的事情。同一页。

  for (const handle of getAllElements) {
    try {
      await handle.click();
    const downloadButton = await page.$('a[title="Download photo"]');
      downloadButton.click();
      await sleep.sleep(2000);
    } catch (e) {
      console.error(e);
    }
  }

初始的 handle.click() 有效,它打开了我在这里讨论的页面。 但是然后 downloadButton.click() 不起作用。 我也试过 page.click(downloadButton)。 我也试过:

const downloadButton = await page.$('a[title="下载照片"]'); 等待下载按钮.click();

为确保我使用的是同一个页面,我在页面显示在屏幕上时直观地执行此操作。

有什么想法吗?

【问题讨论】:

  • elementHandle.click() 返回一个承诺:应该是await downloadButton.click()
  • 我尝试了同样的事情,它只是挂起。我应该把它放在问题中,对不起@mbit
  • 它可以点击吗?就我所见,它没有文字。
  • 是的,它是可点击的。 unsplash.com/photos/GXqvtQh1N9A是右上角的下载按钮。
  • 与我发送的链接的唯一区别是它出现在原始主页的灯箱中。

标签: puppeteer


【解决方案1】:

正如您所提到的,每次单击图像时,它都会在顶部打开一个图层。此外,a[title="Download photo"] 需要相对于 handle 而不是页面。这是工作代码:

for (const handle of getAllElements) {
    await handle.click();
    await handle.$eval('a[title="Download photo"]', el => el.click());
    //allow download
    await page._client.send('Page.setDownloadBehavior', {
        behavior: 'allow',
        downloadPath: './'
    });
    await new Promise(resolve => setTimeout(resolve, 2000));
    //click on X to close the layer
    await page.click('._1NHYN');
}

【讨论】:

  • 您为什么使用handle.$eval 而不是单独使用handle.$? @mbit
  • @FabricioG handle.$ 只选择元素,然后你必须通过它来评估。 handle.$eval 将选择和评估结合在一个功能中,更简单。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多