如何使用python(Selenium)刷新页面直到元素可用?

如何使用python(Selenium)刷新页面直到元素可用?,python,selenium-webdriver,selenium-chromedriver,Python,Selenium Webdriver,Selenium Chromedriver,我想设计一个代码,它倾向于刷新页面,直到特定元素在使用selenium的网页上可见为止。我设计了以下代码,但它给了我一个错误 错误:selenium.common.exceptions.NoSuchElementException:消息:没有这样的元素:无法找到元素:{“方法”:“部分链接文本”,“选择器”:“立即购买”} 代码: 有人能帮忙吗?您应该给一些时间让元素显示出来。尝试使用等待: from selenium.webdriver.support.ui import WebDriverW

我想设计一个代码,它倾向于刷新页面,直到特定元素在使用selenium的网页上可见为止。我设计了以下代码,但它给了我一个错误

错误:selenium.common.exceptions.NoSuchElementException:消息:没有这样的元素:无法找到元素:{“方法”:“部分链接文本”,“选择器”:“立即购买”}

代码:


有人能帮忙吗?

您应该给一些时间让元素显示出来。尝试使用等待:

from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC

while True:
    wait = WebDriverWait(driver, 1)
    wait.until(EC.element_to_be_clickable(driver.find_element_by_partial_link_text('BUY NOW'))
    if driver.find_element_by_partial_link_text('BUY NOW'):
        break
    driver.refresh()

如果selenium找不到单个元素,则会引发异常。 因此,您的循环(虽然为True)不可能是成功的循环,代码“if driver.find_element_by_partial_link_text('BUY NOW')”可能会破坏脚本

有两种方法可以做到这一点:

  • 使用“WebDriverWait”显式等待元素。(建议使用WebDriverWait) 例如:
  • 改用find_元素。 例如:
  • from selenium.webdriver.support.ui import WebDriverWait
    from selenium.webdriver.support import expected_conditions as EC
    
    while True:
        wait = WebDriverWait(driver, 1)
        wait.until(EC.element_to_be_clickable(driver.find_element_by_partial_link_text('BUY NOW'))
        if driver.find_element_by_partial_link_text('BUY NOW'):
            break
        driver.refresh()
    
        from selenium import webdriver
        from selenium.webdriver.support import expected_conditions as EC
        from selenium.webdriver.support.ui import WebDriverWait
        
        driver = webdriver.Chrome()
        wait = WebDriverWait(driver, 30)
        wait.until(EC.presence_of_element_located(("partial link text","BUY NOW")))
        driver.refresh()
    
        from selenium.webdriver.common.by import By
        
        while True:
            if len(driver.find_elements(By.PARTIAL_LINK_TEXT, 'BUY NOW')) > 0:
                break
            driver.refresh()
        
        buy = driver.find_element_by_partial_link_text('BUY NOW')
        buy.click()