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

WebDriver的page_source获取内容与手动查看页面源代码不一致

解决Selenium获取Lichess实时对局页面内容与手动查看不一致的问题

嗨,我之前也碰到过类似的动态页面爬取问题,你的情况大概率是因为Lichess的实时对局页面是通过JavaScript动态渲染内容导致的。

你调用page_source的时候,页面的DOM刚加载完成,但浏览器还没来得及执行所有JavaScript来渲染出对局的具体内容(比如棋盘状态、棋手走法这些),而你手动查看页面源代码时,浏览器已经完成了所有JS渲染,所以两者内容不一样。

给你几个实用的解决方案,一步步来:

  • 等待动态元素加载完成再获取源码
    用Selenium的显式等待功能,指定一个关键元素(比如对局的棋盘、棋手信息块),等它加载出来后再去拿page_source,这样能确保动态内容已经渲染完毕。示例代码如下:

    from selenium.webdriver.support.ui import WebDriverWait
    from selenium.webdriver.support import expected_conditions as EC
    from selenium.webdriver.common.by import By
    
    chrome = webdriver.Chrome('./chromedriver')
    chrome.get('你的实时对局链接')
    
    # 这里以Lichess棋盘的CSS选择器为例,你可以手动去页面检查真实的选择器
    # 等待最多10秒,直到棋盘元素出现
    WebDriverWait(chrome, 10).until(
        EC.presence_of_element_located((By.CSS_SELECTOR, '.board'))
    )
    
    # 现在再获取页面源码就和手动看到的一致了
    with open("page_content.txt",'wb') as fd:
        fd.write(chrome.page_source.encode("utf-8"))
    
  • 模拟真实浏览器,避免被识别为自动化工具
    有些网站会检测Selenium的特征,给自动化工具返回简化版内容。你可以给Chrome添加一些参数,让它更像真实用户的浏览器:

    from selenium.webdriver.chrome.options import Options
    
    options = Options()
    # 禁用自动化检测特征
    options.add_argument("--disable-blink-features=AutomationControlled")
    # 设置真实的用户代理
    options.add_argument("user-agent=Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/114.0.0.0 Safari/537.36")
    # 去掉自动化相关的开关
    options.add_experimental_option("excludeSwitches", ["enable-automation"])
    options.add_experimental_option('useAutomationExtension', False)
    
    chrome = webdriver.Chrome('./chromedriver', options=options)
    chrome.get('你的实时对局链接')
    
  • 如果内容需要滚动加载,补充滚动操作
    要是对局的历史走法等内容需要滚动页面才会加载,你可以加一段滚动代码,确保所有内容都加载出来:

    import time
    
    # 滚动到页面底部
    chrome.execute_script("window.scrollTo(0, document.body.scrollHeight);")
    # 给浏览器一点加载时间
    time.sleep(2)
    

另外,虽然你说想用Selenium熟悉工具,但提一句:Lichess其实有官方API可以直接获取对局数据,要是后续训练需要大量数据,API会比爬取页面高效很多,但既然是练手,用Selenium完全没问题~

内容的提问来源于stack exchange,提问作者muller

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.27 07:25:49