首页 > 编程问答 >Python Selenium 单击 webdriverwait 与 find_element

Python Selenium 单击 webdriverwait 与 find_element

时间:2024-08-01 05:55:04浏览次数:13  
标签:python selenium-webdriver webdriverwait

我无法理解这两个代码块之间的区别。发送点击在 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:

  1. wait.until(EC.presence_of_element_located((By.LINK_TEXT, "ABC"))).click()

  2. 这一行代码同时完成了两件事:

    • 等待: 使用 WebDriverWait expected_conditions ,代码会等待页面上出现链接文本为 “ABC” 的元素,最多等待 45 秒。
    • 点击: 一旦元素出现, wait.until() 方法会返回该元素,代码会立即调用 .click() 方法点击该元素。

代码块 2:

  1. wait.until(EC.presence_of_element_located((By.LINK_TEXT, "ABC")))

  2. 这一行代码只负责等待,它会等待页面上出现链接文本为 “ABC” 的元素,最多等待 45 秒。

  3. driver.find_element(By.LINK_TEXT,"ABC").click()

  4. 这一行代码负责找到元素并点击:

    • 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

相关文章