提问者:小点点

Python-刷新页面,直到元素可点击


我正在尝试创建这个机器人,它将刷新页面,直到元素可见。我的问题是机器人没有刷新,我似乎不知道为什么:)

编辑:机器人现在刷新所需的页面,直到所需的elememt可见,但是机器人不会单击它正在寻找的所需元素,我似乎不知道为什么,因为代码说element.click()

我相信这是原木

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
import time


driver = webdriver.Chrome(executable_path="C:\webdrivers\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()

time.sleep(1)

while true:

    if(driver.find_elements_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'))
   element.click()
   break
else:
   driver.refresh()
continue

共2个答案

匿名用户

presence_of_element_located()是检查页面DOM上是否存在元素的期望。这并不一定意味着该元素是可见的或可点击/可交互的。

理想情况下,要在您需要的元素上调用click(),您需要诱导WebDriver等待element_to_be_clickable(),这是检查元素可见并启用的期望,以便您可以单击它,如下所示:

while True:
    try:
        element = WebDriverWait(driver, 10).until(EC.element_to_be_clickable((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")))
        element.click()
        break
    except TimeoutException:
        driver.refresh()
        continue
    

注意:您必须添加以下导入:

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

匿名用户

我不是专家,但我会尽力帮助你。首先,似乎你的缩进是错误的,你的if条件后面忘记了一个冒号。你的True需要以大写开头才能被识别为布尔值,并且你应该使用try语句而不是if

并且,您不能在WebElement列表中单击()。您需要使用find_element找到一个元素,而不是find_elements

如果您从selenium.公共.异常导入TimeoutException,您可以使用它来确定元素是否存在。

while True:
    try:
        element = WebDriverWait(driver, 10).until(EC.presence_of_element_located((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')))
        element.click()
        break
    except TimeoutException:
        driver.refresh()
        continue