Python,Selenium:如何刷新页面直到元素存在

Posted

技术标签:

【中文标题】Python,Selenium:如何刷新页面直到元素存在【英文标题】:Python, Selenium: how to refresh page until element is present 【发布时间】:2021-08-13 16:40:30 【问题描述】:
while True:
    try:
        browser.find_element_by_xpath('//*[@id="layoutPage"]/div[1]/div/div/div[3]/div[4]/div[2]/div/section/div[1]/div/button/div')
        break
    except NoSuchElementException:
        browser.refresh()

为什么我仍然得到selenium.common.exceptions.NoSuchElementException: Message: no such element: Unable to locate element: "method":"xpath","selector":"//*[@id="layoutPage"]/div[1]/div/div/div[1]/div/div[1]/button[2]" eroor? 我已经从 selenium.common.exceptions 导入了 NoSuchElementException

【问题讨论】:

已经得到答复。 ***.com/questions/10245641/… @saty035 不,它不回答这个问题 可以分享一下url或者html吗? ozon.ru/cart HTML:dropmefiles.com/1NljW 【参考方案1】:

试试

while True:
    try:
        browser.find_element_by_xpath('//*[@id="layoutPage"]/div[1]/div/div/div[3]/div[4]/div[2]/div/section/div[1]/div/button/div')
        break
    except:
        browser.refresh

或者这个:

while True:
    if(browser.find_elements_by_xpath('//*[@id="layoutPage"]/div[1]/div/div/div[3]/div[4]/div[2]/div/section/div[1]/div/button/div')):
        break
    else:
        browser.refresh

注意,我在第二个代码中使用了find_elements。它返回列表。如果列表非空,则应输入if,否则将进入else并刷新页面

【讨论】:

我更新了代码。应该是browser.refresh,没有() 没有帮助。 selenium.common.exceptions.NoSuchElementException: Message: no such element: Unable to locate element: "method":"xpath","selector":"//*[@id="layoutPage"]/div[1]/div/div/div[1]/div/div[1]/button[2]" 有没有其他方法可以刷新页面直到元素出现? 是的,但我的建议也应该有效。所以首先我不明白为什么它不适合你 每次刷新后手动检查您的定位器是否相同。【参考方案2】:

你可以在刷新后使用time.sleep()命令看看是否有效,

我猜它会是因为它会在刷新后立即分析页面,因此页面没有时间完全加载自己并向您抛出错误,因为它没有得到它正在搜索的所需内容!

希望对你有帮助!!!

while True:
    element = browser.find_elements_by_xpath('//*[@id="layoutPage"]/div[1]/div/div/div[3]/div[4]/div[2]/div/section/div[1]/div/button/div')
    if element != None:
        print("got it !")
        break
    else:
        browser.refresh()
        time.sleep(2)
        continue      

for i in range(1):
    while True:
    element = browser.find_elements_by_xpath('//*[@id="layoutPage"]/div[1]/div/div/div[3]/div[4]/div[2]/div/section/div[1]/div/button/div')
    if element != None:
        print("got it !")
        break
    else:
        browser.refresh()
        time.sleep(2)
        continue 

【讨论】:

很遗憾,没有帮助。

以上是关于Python,Selenium:如何刷新页面直到元素存在的主要内容,如果未能解决你的问题,请参考以下文章

Selenium-IDE:如何验证/断言页面刷新

Python Selenium,被动等待,直到满足某些页面条件,然后接管[重复]

如何使用 selenium webdriver 进行强制页面刷新?

有没有一种方法可以刷新页面,直到屏幕上的某个元素存在?仅提供类

如何在 Selenium 中等待页面刷新

如何使用 Selenium 进行硬刷新