我需要在同一个网页上点击同一个表格中的几个元素。我想用for循环这样做但是为了执行该操作我首先需要创建这些元素的列表。
//table[@border='1']//a
这是选择表中所有元素的xpath,如何创建所有这些元素的列表?
虽然@SergiyKonoplyaniy答案是正确的方向,一个接一个地解决您的问题:
find_elements_by_xpath(xpath)
,它将创建与您指定的xpath匹配的元素列表。my_links = driver.find_elements_by_xpath("//table[@border='1']//a")
click()
,你必须迭代你在List中捕获的所有元素,如下所示:
for link in my_links:
link.click()
//table[@border='1']//a
每个元素:
有3个不同的阶段存在,可见性和可互动性(即可点击性)
要收集List中的元素,您应该始终调用具有预期条件的服务员visibility_of_all_elements_located(locator)
,如下所示:
my_list = WebDriverWait(driver, 20).until(expected_conditions.visibility_of_all_elements_located((By.XPATH, "//table[@border='1']//a")))
作为您的问题的解决方案的伪代码将是:
my_links = WebDriverWait(driver, 20).until(expected_conditions.visibility_of_all_elements_located((By.XPATH, "//table[@border='1']//a")))
for link in my_links:
link.click()
为了您将来的参考,如果您打算在任何特定元素上调用click()
,请始终调用具有预期条件的服务员element_to_be_clickable(locator)
,如下所示:
WebDriverWait(driver, 20).until(EC.element_to_be_clickable((By.XPATH, "desired_element_xpath"))).click()
使用find_elements而不是find_element:
links = driver.find_elements_by_xpath("//table[@border='1']//a")
for values in links:
values.click()