如何在Selenium Webdriver中使用Python高效迭代可变数量?

4 投票
3 回答
14816 浏览
提问于 2025-04-18 08:23

我正在用Python和Selenium WebDriver在IE浏览器上工作,下面的代码运行得很好,但我需要把它放在一个循环里。请给点建议。termsName0可能是2、3、4或者更多的数字。

代码:

Select(self.driver.find_element_by_name("termsName0")).select_by_visible_text("Blank No Text")
Select(self.driver.find_element_by_name("termsName1")).select_by_visible_text("Blank No Text")
Select(self.driver.find_element_by_name("termsName3")).select_by_visible_text("Blank No Text")

3 个回答

0

如果你想要遍历不固定数量的项目,可以试试下面的这个方法。

#To fetch all elements start with termsName 
element_list = firefox_driver.find_elements_by_id("termsName[0-9]*")

# below code will iterate over the all links
for i in range(len(element_list)):
        name = "termsName" + str(i)
        Select(self.driver.find_element_by_name(name).select_by_visible_text("Blank No Text")

希望这对你有帮助。

0

这是一种方法。N指定你想要循环多少次。

N = 4

for i in range(N):
    name = "termsName" + str(i)
    Select(self.driver.find_element_by_name(name).select_by_visible_text("Blank No Text")

基本上,它会把当前循环的次数加到"termsName"后面。

上面的代码和下面的代码是一样的:

Select(self.driver.find_element_by_name("termsName0")).select_by_visible_text("Blank No Text")
Select(self.driver.find_element_by_name("termsName1")).select_by_visible_text("Blank No Text")
Select(self.driver.find_element_by_name("termsName2")).select_by_visible_text("Blank No Text")
Select(self.driver.find_element_by_name("termsName3")).select_by_visible_text("Blank No Text")
1

如果你不知道"N"是什么,可以使用try except这种方式来处理。

from selenium.common.exceptions import ElementNotVisibleException, WebDriverException, NoSuchElementException

try:
    i = 0
    while True:
        name = "termsName" + str(i)
        Select(self.driver.find_element_by_name(name).select_by_visible_text("Blank No Text")
        i +=1
 except (ElementNotVisibleException, WebDriverException, NoSuchElementException):
        pass

撰写回答