使用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.
相关产品推荐
相关产品推荐

