【发布时间】:2021-06-21 01:34:19
【问题描述】:
我目前正在使用 puppeteer 抓取一页。我正在尝试做一些可以加快我的工作的东西。
我的 HTML 标记看起来像这样
<div class="inner-wrapper" style="">
<div class="style-001">
<ul role="listbox" aria-multiselectable="true" class="style-002">
<li role="option" aria-selected="false" class="style-003">
<span class="style-004">First Option</span>
</li>
<li role="option" aria-selected="false" class="style-003">
<span class="style-004">Second Option</span>
</li>
<li role="option" aria-selected="false" class="style-003">
<span class="style-004">Third Option</span>
</li>
</ul>
</div>
我试图根据 span 的文本选择特定的“li”。此页面是动态的,因此有时“第三选项”会有索引 [3],有时会有其他索引。它必须仅通过 span 的文本来选择,因为它在其他情况下不起作用。我不能使用类,因为这个网站对每个 'li' 使用相同的类。
我对 google 和 stackoverflow 进行了研究,但没有找到可行的解决方案。我尝试通过 xpath、js 选择器等进行选择。甚至我也尝试过这样的事情:
const [link] = await page.$x('//div[2]/div/div/section/div[2]/div/div/div/ul/li[2]/span[contains(text(), "First Option")]');
await link.click();
或
let selectOption = await page.waitForXPath(`//div[2]/div/div/section/div[2]/div/div/div/ul/li[contains(text(),'First Option')]`);
await selectOption.click();
如果有人可以帮助我,我将不胜感激。
@编辑 如果点击任何选项很重要,本网站会将 aria-selected="false" 更改为 "true"。也许它会有所帮助?
【问题讨论】:
标签: javascript node.js puppeteer