Selenium调用driver.get()访问指定链接返回非目标日期赛马页面如何解决
问题原因
该问题本质是网站存储在浏览器端的Cookie、本地存储(localStorage/sessionStorage)或Selenium启动的Chrome实例残留的缓存覆盖了URL参数的优先级,网站读取了本地存储的历史访问日期,返回了对应页面。
可行解决方案
- 方案1:每次启动Chrome时使用独立隔离的临时会话,完全避免缓存复用
核心配置是开启无痕模式、禁用缓存、指定临时用户目录,每次初始化driver都会生成全新的浏览器环境,不会读取历史缓存,是最稳妥的解决方法,示例代码如下:
from selenium import webdriver from selenium.webdriver.chrome.options import Options import tempfile import shutil # 可动态替换目标日期 target_date = "2021-06-12" url = f"https://www.tab.com.au/racing/meetings/{target_date}" chrome_options = Options() # 开启无痕模式 chrome_options.add_argument("--incognito") # 禁用全局缓存 chrome_options.add_argument("--disable-cache") chrome_options.add_argument("--disable-application-cache") # 生成临时独立用户目录,完全隔离会话 temp_dir = tempfile.mkdtemp() chrome_options.add_argument(f"--user-data-dir={temp_dir}") driver = webdriver.Chrome(options=chrome_options) driver.get(url) # 此处放置你的爬取逻辑 # 运行结束销毁实例并清理临时文件 driver.quit() shutil.rmtree(temp_dir)
- 方案2:访问新URL前手动清理所有本地存储
如果不想每次重新初始化driver,可以在调用driver.get()加载新日期URL前执行以下操作清空残留数据:
# 清空所有历史Cookie driver.delete_all_cookies() # 清空浏览器本地存储 driver.execute_script('window.localStorage.clear(); window.sessionStorage.clear();') # 加载新URL后强制刷新 driver.get(new_date_url) driver.refresh()
- 方案3:增加日期校验逻辑避免爬取错误
访问URL后增加显式等待,校验页面显示的日期是否和目标日期完全一致,校验通过后再执行爬取逻辑,彻底规避缓存导致的异常数据。
注意事项
- 每次爬取完成后必须调用
driver.quit()销毁浏览器实例,不要残留后台进程 - 不要跨日期复用同一个driver实例,更换日期时优先重新初始化driver,稳定性更高
内容的提问来源于stack exchange,提问作者The Great Game
相关产品推荐
相关产品推荐

