如何使循环单击元素并确保该元素处于循环中

Posted

技术标签:

【中文标题】如何使循环单击元素并确保该元素处于循环中【英文标题】:How to make a loop click an element and make sure that element is in a loop 【发布时间】:2020-10-05 12:39:27 【问题描述】:

我正在尝试让我的 for 循环正常单击某个元素(如果存在),并且我希望我的机器人确保该元素存在,但我的代码无法使用 Python 处理 selenium。

driver.get("https://www.roblox.com/groups/650266/Trade#!/about")
driver.maximize_window()
driver.implicitly_wait(3)
driver.find_element_by_class_name('group-dropdown').click()
driver.find_element_by_id("role-3874587").click()

item = [driver.find_element_by_id("member-" + str(q)) for q in range(100000, 10000000000)]

for q in item:
    driver.implicitly_wait(5)
    if len(driver.find_elements_by_id("member-" + str(q))) > 0:
        driver.find_element_by_id("member-" + str(q)).click()

这是我想要点击的图片,我只是想让机器人使用 Selenium 以自己的方式找到某个元素

这也是我希望机器人点击的另一张图片

【问题讨论】:

您只是想获取成员列表吗?您当然不需要迭代超过 90 亿个数字! 我正在尝试获取该特定页面中的数字列表并从该特定组部分中单击它们 但我不知道该怎么做 【参考方案1】:

可以这样获取成员列表

driver.implicitly_wait(10)
membersDiv = driver.find_element(By.CSS_SELECTOR, 'div.section-content.group-members-list')
for member in membersDiv.find_elements(By.TAG_NAME, 'li'):
    print(member.get_attribute('id'))

返回

member-1701563363
member-690819184
member-500878244
member-752963612
member-1394481071
member-389753026
member-368517467
member-1104703575
member-1641797931

我添加了一个implicit wait,因为其中一个元素没有立即加载,您可以花更多时间在上面找出哪个元素,然后使用explicit wait。

代码只是获取包含无序列表 (ul) 的父 div,并且由于它只包含一个列表,因此只需抓取其中的每个列表项 (li)。它目前正在打印成员 ID,但您可以轻松地将其更改为您需要的任何功能。

【讨论】:

是否可以点击每个元素? 是的,在for 循环中,您可以调用member.click(),因为member 是一个WebElement

以上是关于如何使循环单击元素并确保该元素处于循环中的主要内容,如果未能解决你的问题,请参考以下文章

JQuery单击以使用陷入循环的数组来识别元素

如何在自身上有一个 HTML 文本元素循环?

在循环中单击另一个元素时将事件侦听器添加到元素

如何将元素添加到R中的列表(循环)[重复]

添加下一个按钮以循环遍历javascript中的元素

如何循环每个元素