如何在Selenium中循环“刷新页面”

2024-04-28 23:43:31 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在使用Selenium从Excalibur中提取表。当您将文件上载到其中时,您必须刷新页面,直到页面重定向到工作区。显示:

<div class="container"> == $0 empty

然后在刷新时显示:

<div class="container">
 <div class="row pb-4">
 <div class="row">
 <div class="row">

我使用了“time.sleep()”,但根据文件和页面的不同,等待的时间会增加,有时会出错。然后我试着:

`while True:
    if driver.find_element_by _linked_text('Workspace'):
        break
    else:
        driver.refresh()`

只会冻结,而不会刷新页面


Tags: 文件divtimecontainerdriverselenium时间sleep
2条回答

如果页面自动将您重定向到您希望使用此元素的位置,那么我建议使用selenium的内置WebDriverWait函数。这将接受等待加载元素的最长时间作为参数,并将在找到该元素后立即返回该元素。比如:

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

driver.refresh()
my_element = WebDriverWait(driver, 30).until(EC.presence_of_element_located((By.PARTIAL_LINK_TEXT, "Workspace")))
# code that needs this element loaded

这将使代码冻结长达30秒,但如果元素加载得更快,则可以更快地继续。如果30秒后找不到元素,将引发异常

您可以阅读有关selenium waitshere的更多信息

您可能需要添加如下刷新冷却:

from time import sleep
while True:
    if driver.find_element_by _linked_text('Workspace'):
        break
    else:
        driver.refresh()
        sleep(2)

如果没有此功能,Selenium将不断尝试刷新页面,因此您将通过发送它无法处理的永无止境的请求流来杀死浏览器

相关问题 更多 >