You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用Python Selenium抓取加载不稳定页面数据的问题

解决方案:持续刷新直到成功加载目标页面

我懂你要做的事儿——反复刷新那个只有33%加载成功率的页面,直到能顺利找到并操作"View as HTML"按钮,最终拿到页面内容对吧?结合你提到的已有初始化好的driver,还有要加try/catch块的建议,我给你整理了完整的实现代码:

from selenium.common.exceptions import NoSuchElementException
from selenium.webdriver.common.by import By
import time

def get_table(url, driver):
    while True:
        try:
            # 加载目标页面
            driver.get(url)
            # 保存主窗口句柄(防止页面跳转后丢失上下文)
            main_window = driver.current_window_handle
            # 定位目标按钮
            html_button = driver.find_element(By.XPATH, '//*[@title="View as HTML"]')
            # 执行你需要的操作(这里假设是点击,如果你原本是send_keys可以替换)
            html_button.click()
            
            # 等待HTML内容加载(实际项目更推荐用显式等待替代固定时长)
            time.sleep(2)
            
            # 获取最终的HTML内容
            target_html = driver.page_source
            print("页面加载成功,已获取HTML内容")
            return target_html
        
        except NoSuchElementException:
            # 元素找不到说明加载失败,刷新页面重试
            print("页面加载失败,正在刷新重试...")
            driver.refresh()
            # 加短等待避免频繁请求给服务器压力
            time.sleep(1)

几个关键细节说明:

  • 用while True做无限循环,只有当try块里的所有操作都成功执行完,才会通过return跳出循环
  • 专门捕获NoSuchElementException——这是页面加载失败最常见的情况(找不到目标按钮),如果还有其他可能的异常(比如页面超时),可以把捕获范围扩大为except Exception as e,但建议尽量捕获具体异常更严谨
  • 代码里用了简单的time.sleep()等待,实际项目中更推荐用Selenium的显式等待(比如WebDriverWait)来等待元素出现,比固定时间等待更可靠
  • 保存主窗口句柄main_window,如果点击按钮后打开了新窗口,还可以用这个句柄切回主窗口或者切换到新窗口处理

内容的提问来源于stack exchange,提问作者David J.

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.22 07:42:56