【发布时间】:2021-03-02 19:02:17
【问题描述】:
我第一次使用 Puppeteer,我有这个代码可以点击某个元素:
await page.waitForSelector('.item-table > .grid-item > .grid-item-container > .grid-table-container > .grid-option-table:nth-child(1) > .grid-option:nth-child(1) > .grid-option-selectable > div');
await page.click('.item-table > .grid-item > .grid-item-container > .grid-table-container > .grid-option-table:nth-child(1) > .grid-option:nth-child(1) > .grid-option-selectable > div');
由于我在页面上有很多.item-table 元素,我想让它点击它的一个后代中有特定的文本(我不知道后代的级别)。
我已经在文档中甚至在 SO 问题中搜索了解决方案,但我找不到任何有用的东西。
我尝试添加> :contains("Foo bar"),但可能是错误的方法。事实上,它不起作用。
await page.waitForSelector('.item-table > :contains("Foo Bar") > .grid-item > .grid-item-container > .grid-table-container > .grid-option-table:nth-child(1) > .grid-option:nth-child(1) > .grid-option-selectable > div');
await page.click('.item-table > :contains("Foo Bar") > .grid-item-container > .grid-table-container > .grid-option-table:nth-child(1) > .grid-option:nth-child(1) > .grid-option-selectable > div');
那么,Puppeteer 怎么做呢?
编辑: 这是我要抓取的标记:
<div class="item-table"></div>
<div class="item-table"></div>
<div class="item-table"></div>
<div class="item-table"></div>
<div class="item-table"></div>
<div class="item-table"></div>
<div class="item-table">
<div class="grid-item">
<div class="grid-item-container">
<div class="grid-table-container>
<div class="grid-option-header">
<div class="grid-option-caption">
<div class="grid-option-name">
Foo Bar
<span>some other text</span>
</div>
</div>
</div>
<div class="grid-option-table">
<div class="grid-option">
<div class="grid-option-selectable">
<div></div>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
<div class="item-table"></div>
<div class="item-table"></div>
所以,我想点击div,它位于grid-option-selectable div 中,在item-table div 中包含Foo Bar 的后代。
【问题讨论】:
标签: javascript puppeteer selector