python - Selenium(Python)替代带有索引的for循环
问题描述
有没有一种更有效的方法来读取具有相同名称的类,而不是做我正在做的事情,我基本上通过索引的代码,因为它们都具有相同的名称,如果选择具有相同类的元素,是否有更好的方法名字,而不是我做的方式
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)
解决方案
避免索引,您可以使用以下定位器策略:
要从所有使用Selenium和python中提取和打印文本,例如Apple、Orange等,您可以使用以下任一Locator Strategies:<li class="Fruit">
使用
css_selector
和get_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")])
理想情况下,您需要诱导WebDriverWait并且visibility_of_all_elements_located()
您可以使用以下任一Locator Strategies:
使用
CSS_SELECTOR
和get_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
奥特罗
链接到有用的文档:
get_attribute()
方法Gets the given attribute or property of the element.
text
属性返回The text of the element.
- 使用 Selenium 的 text 和 innerHTML 之间的区别
推荐阅读
- ios - 在 performBlock 中多次保存上下文
- python - AttributeError:“numpy.ndarray”对象没有属性“值”
- javascript - 如何将隐藏/功能滚动条与视差元素结合起来?
- email - 如何在 Microsoft Outlook 中创建带有图像背景的时事通讯
- javascript - 如何将请求委托给 nodejs express 中的特定路由?
- c++ - 为什么在 x64 构建的 ARM 构建中缺少 CoCreateInstanceFromApp?
- java - 一个列表的多个 JComboboxes
- php - 在 Woocommerce 中更改交叉销售的订购参数
- java - 强制一个新的 HTTP 响应
- raku - 在 Perl 6 中是导出和绑定