我无法理解这两个代码块之间的区别。发送点击在 webdriverwait 和 find_elements 中都有效。
代码 1
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 = webdriver.Chrome(options=options)
wait = WebDriverWait(driver, 45)
wait.until(EC.presence_of_element_located((By.LINK_TEXT, "ABC"))).click()
代码 2
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 = webdriver.Chrome(options=options)
wait = WebDriverWait(driver, 45)
wait.until(EC.presence_of_element_located((By.LINK_TEXT, "ABC")))
driver.find_element(By.LINK_TEXT,"ABC").click()
这两个代码块的目的都是单击一个链接文本为“ABC”的元素,但它们实现这一目的的方式略有不同:
代码块 1:
-
wait.until(EC.presence_of_element_located((By.LINK_TEXT, "ABC"))).click()
-
这一行代码同时完成了两件事:
-
等待:
使用
WebDriverWait
和expected_conditions
,代码会等待页面上出现链接文本为 “ABC” 的元素,最多等待 45 秒。 -
点击:
一旦元素出现,
wait.until()
方法会返回该元素,代码会立即调用.click()
方法点击该元素。
-
等待:
使用
代码块 2:
-
wait.until(EC.presence_of_element_located((By.LINK_TEXT, "ABC")))
-
这一行代码只负责等待,它会等待页面上出现链接文本为 “ABC” 的元素,最多等待 45 秒。
-
driver.find_element(By.LINK_TEXT,"ABC").click()
-
这一行代码负责找到元素并点击:
-
driver.find_element(By.LINK_TEXT,"ABC")
会在页面上查找链接文本为 “ABC” 的元素。 -
找到元素后,代码会调用
.click()
方法点击该元素。
-
区别和最佳实践:
- 代码块 1 更简洁 ,因为它将等待和点击操作合并到了一行代码中。
- 代码块 2 更易读 ,因为它将等待和点击操作分开,更容易理解代码的逻辑。
-
代码块 1 更安全
,因为它确保了在元素出现并可以点击后再进行点击操作。代码块 2 存在潜在风险,因为在等待之后,元素可能因为页面变化而变得不可点击,从而导致
ElementClickInterceptedException
异常。
建议:
为了代码的简洁性、可读性和安全性,建议使用代码块 1 的写法,将等待和点击操作合并到
wait.until()
方法中。
总结:
两种方法都能实现点击链接文本为 “ABC” 的元素,但代码块 1 更简洁、安全,并且符合最佳实践。
标签:python,selenium-webdriver,webdriverwait From: 78818446