gpt4 book ai didi

python - Selenium 查看一个类并确定该类中有多少元素,最后对找到的所有元素执行操作

转载 作者:行者123 更新时间:2023-12-01 00:02:03 25 4
gpt4 key购买 nike

我需要与类下的元素进行交互,但每次运行脚本时,该类中的元素数量都会发生变化。

为了给您提供上下文,该网站是一个日历,我需要在其中选择一天作为我的工作模板。每次我运行脚本(每月)时,带有日历的网页都会更新以显示当前月份,因此 Selenium 选择上个月的同一天。但每个月采 Selenium 日的含量不同,元素数量也每个月都在变化。例如,当前编写的脚本是为了与 5 个元素交互,但下个月它将无法工作,因为所选日期将具有不同数量的元素。因此,每个月我都必须手动更改脚本以与正确数量的元素进行交互。

以下是网站元素结构的示例:

<ul class="list-unstyled tags-list grid_9">
<li><!-- react-text: 185 -->Text<!-- /react-text --><i data-id="0" class="icon-cancel pointer icon12
ml5px error"></i></li>
<li><!-- react-text: 188 -->Text<!-- /react-text --><i data-id="1" class="icon-cancel pointer icon12
ml5px error"></i></li>
<li><!-- react-text: 191 -->Text<!-- /react-text --><i data-id="2" class="icon-cancel pointer icon12
ml5px error"></i></li>
</ul>

因此,我需要在“list-unstyled Tags-list grid_9”类中交互的元素数量始终在变化。 id 为“0”、“1”和“2”的元素。有时可能有 4 个 ID 为“0”、“1”、“2”、“3”的元素,有时可能有 2 个元素等。

我一直在试图弄清楚如何编写一个脚本,其中 Selenium 在该类“list-unstyled Tags-list grid_9”中查找,查看其中有多少元素并执行 -

driver.find_element_by_(xpath,class,id whatever).click()

在其中找到的所有元素。

更新:所以我尝试了这段代码:

tab = driver.find_element_by_css_selector('#postForm > div:nth-child(3) > ul.list-unstyled.tags-list.grid_9')
hashs = tab.find_elements_by_tag_name('li')
for element in hashs:
element.find_element_by_tag_name('i').click()

它给了我这个错误:

stale element reference: element is not attached to the page document

最佳答案

我认为您已经非常接近实现目标了。尝试用 JS 点击即可。

tab = driver.find_element_by_css_selector('#postForm > div:nth-child(3) > ul.list-unstyled.tags-list.grid_9')
hashs = tab.find_elements_by_tag_name('li')
for element in hashs:
x_element=element.find_element_by_tag_name('i')
driver.execute_script("arguments[0].click();", x_element)

等待元素可点击,然后点击。

from selenium.webdriver.common.by import By
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC

tab = driver.find_element_by_css_selector('#postForm > div:nth-child(3) > ul.list-unstyled.tags-list.grid_9')
hashs = tab.find_elements_by_tag_name('li')

number_of_buttons = len(hashs)
for x in range(number_of_buttons):

button = WebDriverWait(driver, 50).until(EC.element_to_be_clickable((By.CSS_SELECTOR, "#postForm > div:nth-child(3) > ul.list-unstyled.tags-list.grid_9 > li:nth-child(" + str(x+1) + ") > i")))
button.click()

关于python - Selenium 查看一个类并确定该类中有多少元素,最后对找到的所有元素执行操作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60268909/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com