我看到了很多帖子(例如请参见这里和这里),说我可以通过以下代码点击某些东西,
await page.click('.route-redirect-box'); // via Puppeteer page.click
await page.evaluate((css_selector) => {
document.querySelector(css_selector).click(); // or via page.evaluate
}, css);
然而,在我测试了一些网站后,似乎
page.evaluate
在使用 headless: false
模式时无法正常工作,但是 page.click
始终有效。例如,在这个网站的页面上,我尝试按以下方式点击某些内容:var css = '#searchPaginationTop > nav > a:nth-child(5)';
await page.evaluate((css_selector) => { document.querySelector(css_selector).click();}, css);
什么也没有发生,但如果我使用page.click
,它会按预期工作。
我在想,我想要点击的元素不是一个普通的可点击元素,因为该元素的html代码如下:
<a class="svg" data-goto-page="3" data-total-pages="3" data-ga="event" data-ga-category="Brands at allbeauty-Burberry-Pagination" data-ga-action="Brands at allbeauty-Burberry-Pagination-Next-Touch" data-ga-label="Brands at allbeauty-Burberry-Pagination-Next-Link">
<svg viewBox="0 0 21.9 38.7" alt="Next Page" title="Next Page ">
<use xlink:href="#icon-ab-arrow-right">
</use>
</svg>
</a>
可能是因为这个元素是一些 data-ga
的东西,所以 page.evaluate
无法单击它吗?
#searchPaginationTop
的子元素。我可以想象,它可能是动态注入的,也就是说,您需要等待相应的 JavaScript 运行。 - Ryuno-Kihref
,我猜应该存在一些事件监听器,但我就是找不到。那么page.evaluate
+document.click
不能触发该事件监听器吗?你能否给我更多的指引? - avocadoheadless=false
模式,这样当代码执行时,我可以看到元素是否真正被点击。 - avocadopuppeteer
的工作方式无关。如果您在浏览器中打开页面并打开开发工具控制台,然后执行document.querySelector('#searchPaginationTop > nav > a:nth-child(5)').click()
,也不会发生任何事情。这是因为这不是直接链接,而是JS应用程序处理鼠标事件。它甚至可以注册全局窗口事件以捕获所有mousedown
/click
事件。 - Christos LytrasdispatchEvent
和MouseEvent
进行实验。 - Christos Lytras