Selenium点击百度财报下载链接后页面持续加载问题求助
解决Selenium访问百度财报页面点击后持续加载的问题
出现点击后页面持续加载的情况,主要有以下几个原因及对应的解决办法:
原因1:反爬机制识别了Selenium特征
百度投资者关系页面会检测浏览器是否由自动化工具操控,Selenium默认的ChromeDriver带有明显的自动化标识,被页面拦截后会导致请求异常、加载停滞。
解决办法:隐藏自动化痕迹
通过修改Chrome启动参数和执行JS脚本,移除Selenium的特征标识:
from selenium import webdriver from selenium.webdriver.chrome.options import Options from selenium.webdriver.common.by import By from selenium.webdriver.support.ui import WebDriverWait from selenium.webdriver.support import expected_conditions as EC options = Options() # 禁用自动化控制检测 options.add_argument("--disable-blink-features=AutomationControlled") # 设置常规浏览器的User-Agent options.add_argument("user-agent=Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/118.0.0.0 Safari/537.36") # 关闭扩展和沙箱模式,模拟正常浏览器环境 options.add_argument("--disable-extensions") options.add_argument("--no-sandbox") browser = webdriver.Chrome(options=options) # 执行脚本移除navigator.webdriver属性 browser.execute_script("Object.defineProperty(navigator, 'webdriver', {get: () => undefined})") browser.get("https://ir.baidu.com/financial-reports") # 用显式等待确保元素可点击,避免提前点击导致异常 download_link = WebDriverWait(browser, 10).until( EC.element_to_be_clickable((By.XPATH, '//*[@title="BIDU 3Q22 ER v2.pdf"]')) ) download_link.click()
原因2:页面加载策略导致等待超时
Selenium默认等待页面完全加载完成(包括所有图片、脚本等资源),点击财报链接后,页面可能加载大量第三方资源或触发异步请求,导致一直处于加载状态。
解决办法:调整页面加载策略
将加载策略设置为eager(仅等待DOM加载完成)或none(不等待页面加载),减少不必要的等待:
# 在创建options后添加这行代码 options.page_load_strategy = 'eager'
更高效的替代方案:直接下载PDF
如果已经知道财报PDF的直接链接,完全可以跳过Selenium,用requests库直接下载,避免页面交互的麻烦:
import requests pdf_url = "https://ir.baidu.com/static-files/b7b97cfa-f30b-48ba-8702-e5edb2767b21" headers = { "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/118.0.0.0 Safari/537.36" } response = requests.get(pdf_url, headers=headers) with open("BIDU_3Q22_ER_v2.pdf", "wb") as file: file.write(response.content)
内容的提问来源于stack exchange,提问作者Jason
相关产品推荐
相关产品推荐

