我试图创建一个自动化的一些网站与 puppet 戏,我有一个麻烦,当我试图点击选择列表内的元素。
我在谷歌上搜索后发现,只有当列表在"select"元素中时,才能选择一个项目。我的问题是,我试图自动化的HTML在一个"div"中:
<div class="dropdown open dropdown--gray">
<div class="dropdown__header">
<div class="dropdown__field">other</div>
<div class="dropdown__opener">
<span class="icon icon-chevron-down"></span>
</div>
</div>
<div class="dropdown__list">
<div class="dropdown__list-item selected">other</div>
<div class="dropdown__list-item">.org</div>
<div class="dropdown__list-item">.co.uk</div>
<div class="dropdown__list-item">.net</div>
<div class="dropdown__list-item">.gov</div>
<div class="dropdown__list-item">.de</div>
<div class="dropdown__list-item">.fr</div>
<div class="dropdown__list-item">.nl</div>
<div class="dropdown__list-item">.com</div>
<div class="dropdown__list-item">.be</div>
<div class="dropdown__list-item">.jpg</div>
</div>
</div>
我已经试过了:
await page.click('div.dropdown__field');
const elementHandle4=await page.$$("div.dropdown__list-item");
await elementHandle4[8].click();
但实际上它没有点击元素。当我在这段代码运行后手动打开列表时,我看到它向下滚动了列表的滚动条,但没有点击元素。
谢谢
3条答案
按热度按时间kxkpmulp1#
试试这样的方法:
更新日期:
它看起来像是视口中的问题,因为它工作正常,并选择了'.nl'选项,而没有使用以下脚本进行任何滚动:
但如果我删除
defaultViewport: null
属性,它将不起作用w1e3prcc2#
我猜你需要看到那个元素才能触发点击事件。首先,你必须滚动到元素的位置才能看到元素,然后触发点击事件。
对我很有效
jchrr9hc3#
我有一个和你类似的问题。在我的例子中,HTML看起来像这样:
为了简洁起见,我删除了所有不相关的类名和属性,并将它们替换为
...
。这里我想从列表中选择第二个选项,即:
这是第二种选择,所以这是可行的,但并不理想:
如果在服务器端进行了一些更改,导致不同的排序,会发生什么?这可能很难用Puppeteer这样的自动化系统检测到,并可能导致不连续的数据-假设您这样做是为了抓取数据,然后您希望分析。
更好的方法是:
将
+ 1
添加到索引是因为HTML从nth-child
中的1开始索引,而通过从querySelectorAll
获得的元素进行迭代显然是从0开始的。