Selenium(Python)可替代带有索引的for循环

2024-10-03 00:26:58 发布

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

有没有一种更有效的方法来读取同名的类,而不是像我所做的那样,我基本上是通过一个带有索引的代码,因为它们都有相同的名称,如果选择具有相同类名的元素,有没有更好的方法,而不是像我这样做

Z = len(driver.find_elements_by_class_name('Class_With_Names'))

for x in range(Z):

x += 1

thisClass = driver.find_element_by_xpath(f"//ul[@class='same_name']/div[{str(x)}]")
classText = thisClass.find_element_by_class_name("class_with_text")

print(classText.text)

Tags: 方法代码textname名称元素bydriver
2条回答

避免使用索引可以使用以下Locator Strategy

要使用Selenium从所有<li class="Fruit">中提取和打印文本,例如苹果、橙色等,您可以使用以下任一Locator Strategies

  • 使用css_selectorget_attribute("innerHTML")

    print([my_elem.get_attribute("innerHTML") for my_elem in driver.find_elements_by_css_selector("ul.same_name div")])
    
  • 使用xpath文本属性:

    print([my_elem.text for my_elem in driver.find_elements_by_xpath("//ul[@class='same_name']//div")])
    

理想情况下,您需要为visibility_of_all_elements_located()诱导WebDriverWait,并且您可以使用以下任一Locator Strategies

  • 使用CSS_SELECTORget_attribute("innerHTML")

    print([my_elem.get_attribute("innerHTML") for my_elem in WebDriverWait(driver, 20).until(EC.visibility_of_all_elements_located((By.CSS_SELECTOR, "ul.same_name div")))])
    
  • 使用XPATH文本属性:

    print([my_elem.text for my_elem in WebDriverWait(driver, 20).until(EC.visibility_of_all_elements_located((By.XPATH, "//ul[@class='same_name']//div")))])
    
  • 注意:您必须添加以下导入:

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

奥特罗

链接到有用的文档:

您是否尝试过通过xpath使用find_元素s\u?这将返回具有该类名的所有元素

您的代码看起来好像在div之后递增?您是在寻找所有类的信息还是在div中循环

相关问题 更多 >