在selenium python中循环id

2024-07-05 10:39:56 发布

您现在位置:Python中文网/ 问答频道 /正文

我有脚本选择按钮如下

driver.find_element_by_id("Product").click()
driver.find_element_by_id("id1").click()
driver.find_element_by_id("id1").click()
driver.find_element_by_id("id2").click()
driver.find_element_by_id("id2").click()
driver.find_element_by_id("id3").click()
driver.find_element_by_id("id3").click()
driver.find_element_by_id("id4").click()
driver.find_element_by_id("id4").click()
driver.find_element_by_id("id5").click()
driver.find_element_by_id("id5").click()
driver.find_element_by_id("id6").click()
driver.find_element_by_id("id6").click()
driver.find_element_by_id("id7").click()
driver.find_element_by_id("id7").click()

所以我在这里选择按钮产品,然后它有多个项目。 每个代码将选择产品并取消选择

如何循环此id选择而不是编写长脚本 就像一旦选择了产品按钮,然后循环选择产品中的所有项目


Tags: 脚本idby产品driverelementfind按钮
2条回答

@COLDSPEED的评论为我们指出了正确的方向,@VaibhavMule的答案近乎完美,但他们都没有从Selenium的角度考虑click()的影响。在

单击()

click()将通过selenium.webdriver.remote.webelement界面与文档交互。在

因此click()方法调用将执行新鲜度检查,以确保元素引用仍然有效。这实际上决定了元素是否仍然附加到DOM。如果这个测试失败,那么抛出一个StaleElementReferenceException,并且以后对这个实例的所有调用都将失败。因此,在调用每个click()之前,我们必须将expected_conditions子句设置为element_to_be_clickable来归纳WebDriverWait。在

因此,对于loop this id selections到{},可以使用以下代码块:

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

driver.find_element_by_id("Product").click()
WebDriverWait(driver, 5).until(EC.element_to_be_clickable((By.ID, "id1")))
for id in range(1, 7):
    my_id = "my_id{}".format(id)
    WebDriverWait(driver, 3).until(EC.element_to_be_clickable((By.ID, "my_id"))).click()
    WebDriverWait(driver, 3).until(EC.element_to_be_clickable((By.ID, "my_id"))).click()

这可以减少您的代码,并且您可以使用所需的适当范围。在

driver.find_element_by_id("Product").click()
for element_id in range(1, 8):
    id = "id{}".format(element_id)
    driver.find_element_by_id(id).click()
    driver.find_element_by_id(id).click()

相关问题 更多 >