自动刷新机器人不会点击元素

Auto refresh bot won't click on element

我正在尝试创建一个机器人,只要所需元素对 click/visible 可用,它就会自动刷新和停止。我已经完成了刷新部分,当机器人看到所需的元素时它就停止了,但我就是不明白为什么它不点击该元素:/
Error log

from selenium import webdriver
from selenium.common.exceptions import TimeoutException
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC

driver = webdriver.Chrome(executable_path="C:\selenium drivers\chromedriver.exe")

driver.get("xxx")

driver.maximize_window()

click = driver.find_element_by_xpath('//*[@id="coiPage-1"]/div[2]/div[1]/button[1]')
click.click()

while True:
    try:
        element = WebDriverWait(driver, 2).until(EC.presence_of_element_located((driver.find_element_by_xpath('//*[@id="siteContainer"]/div[6]/div/div[3]/div[1]/div[2]/div/div/div[2]/div[2]/div[3]/div[2]/form/button'))))
        driver.find_element_by_xpath('//*[@id="siteContainer"]/div[6]/div/div[3]/div[1]/div[2]/div/div/div[2]/div[2]/div[3]/div[2]/form/button').click()
        break
    except TimeoutException:
        driver.refresh()
        continue
  1. 我猜你使用的是非唯一定位器,所以 driver.find_element_by_xpath('xxx') returns 你输入了错误的元素,所以点击它什么也没做。
    要解决此问题,请验证您使用的 xxx XPath 定位器是否唯一。
  2. 或者您可能过早地尝试点击该元素,因此它会为您提供 ElementClickInterceptedException 或类似内容。
    为了给出更好的答案,我们需要查看您的实际代码,而不是 xxx 如果可能的话,包括错误回溯。

presence_of_element_located()

presence_of_element_located()locator 作为参数而不是元素。

所以你需要改变:

element = WebDriverWait(driver, 2).until(EC.presence_of_element_located((driver.find_element_by_xpath('xxx'))))

如:

element = WebDriverWait(driver, 2).until(EC.presence_of_element_located((By.XPATH, "xxx")))

理想情况下,找到 clickable 元素并调用 click()它,你需要诱导 WebDriverWait for the element_to_be_clickable() and you can use the following :

while True:
    try:
        WebDriverWait(driver, 10).until(EC.element_to_be_clickable((By.XPATH, "xxx"))).click()
        break
    except TimeoutException:
        driver.refresh()
        continue