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

Python中Selenium登录后无法获取目标页面完整HTML的问题求助

问题描述

我需要爬取一个需身份验证的网页数据,已通过Selenium完成身份验证,但访问目标页面时,Chromium中能正常显示全部内容,代码却仅输出页面头部的部分内容。尝试过显式等待目标ID、滚动页面、执行JS获取HTML、修改UA等操作,仍出现超时问题。

代码示例

import time
from selenium import webdriver
from selenium.webdriver.common.keys import Keys
from selenium.webdriver.common.by import By
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
from selenium.webdriver.chrome.options import Options
import sys

driver = webdriver.Chrome()
driver.get('https://www.boursedirect.fr/fr/login')

identifiant = driver.find_element(By.ID,'bd_auth_login_type_login')
mot_de_passe = driver.find_element(By.ID,'bd_auth_login_type_password')

identifiant.send_keys('XXXXXXXXXX')
mot_de_passe.send_keys('XXXXXXXXXXXX')

mot_de_passe.send_keys(Keys.RETURN)
time.sleep(20)
driver.get('https://www.boursedirect.fr/fr/page/portefeuille')
time.sleep(5)
for _ in range(100):
    driver.execute_script("window.scrollTo(0, document.body.scrollHeight);")
time.sleep(5)
WebDriverWait(driver, 50).until(EC.presence_of_element_located((By.ID, "tabPTR")) )
print(driver.page_source)

已尝试的操作

  • 使用driver.execute_script("window.scrollTo(0, document.body.scrollHeight);")滚动页面
  • 执行JS:driver.execute_script("return document.documentElement.outerHTML")
  • 修改UA

解决方案
  1. 替换固定sleep为显式等待,确保登录完成再跳转
    固定等待时间不稳定,登录后先等待登录成功的标识元素(比如用户头像、用户名)出现,再访问目标页面:
# 登录后等待用户标识加载完成,替换为实际的选择器
WebDriverWait(driver, 30).until(
    EC.presence_of_element_located((By.CSS_SELECTOR, ".user-avatar"))
)
# 再跳转目标页面
driver.get('https://www.boursedirect.fr/fr/page/portefeuille')
  1. 优化滚动加载逻辑,避免无意义重复滚动
    连续滚动100次可能页面还没来得及加载新内容,改为循环滚动直到页面高度不再变化,每次滚动后加短等待:
last_height = driver.execute_script("return document.body.scrollHeight")
while True:
    driver.execute_script("window.scrollTo(0, document.body.scrollHeight);")
    time.sleep(2)  # 给页面预留加载时间
    new_height = driver.execute_script("return document.body.scrollHeight")
    if new_height == last_height:
        break  # 高度不变说明已加载完所有内容
    last_height = new_height
  1. 更换等待条件,确保元素可见而非仅存在
    presence_of_element_located只判断元素存在于DOM中,可能还未渲染显示,改用visibility_of_element_located确保元素可见后再操作:
WebDriverWait(driver, 50).until(
    EC.visibility_of_element_located((By.ID, "tabPTR"))
)
  1. 检查目标内容是否在iframe中
    部分网站会把核心内容放在iframe里,需要先切换到对应iframe才能获取内容:
# 先找到目标iframe,替换为实际的选择器
iframe = WebDriverWait(driver, 30).until(
    EC.presence_of_element_located((By.CSS_SELECTOR, "iframe[src*='portefeuille']"))
)
driver.switch_to.frame(iframe)
# 之后再执行等待、滚动或获取源码操作
  1. 用JS获取完整HTML结构
    如果driver.page_source获取不全,尝试用JS命令直接获取整个文档的HTML:
full_html = driver.execute_script("return document.documentElement.outerHTML")
print(full_html)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.04 09:44:50