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

Selenium无法滚动目标侧边栏/容器问题求助

解决Selenium滚动侧边栏容器失败的问题

针对你遇到的侧边栏容器滚动无效、无法加载全部数据的问题,结合容器有JS保护的情况,给你几个可行的调整方案:

一、更换滚动方式:直接设置容器滚动到底部

你的代码用了scrollBy,但部分自定义容器不响应这个方法,换成直接设置scrollTop到容器最大高度试试:

last_height = driver.execute_script("return arguments[0].scrollHeight;", member_container)
# 改成每次直接滚到底
while True:
    # 直接将容器滚动条拉到最底部
    driver.execute_script("arguments[0].scrollTop = arguments[0].scrollHeight;", member_container)
    
    time.sleep(5)  # 等待加载新内容
    
    new_height = driver.execute_script("return arguments[0].scrollHeight;", member_container)
    if new_height == last_height:
        break
    last_height = new_height

二、针对自定义滚动条:模拟鼠标拖拽滚动

如果容器用了自定义滚动条(不是浏览器原生的),可以定位滚动条滑块,用ActionChains拖拽:

from selenium.webdriver.common.action_chains import ActionChains

# 先定位滚动条的滑块元素(需要自己用F12找对应的selector)
scroll_slider = driver.find_element(By.CSS_SELECTOR, "你的滚动条滑块选择器")

# 多次拖拽滑块到底部,直到没有新内容加载
while True:
    last_height = driver.execute_script("return arguments[0].scrollHeight;", member_container)
    # 拖拽滑块从当前位置到最下方
    ActionChains(driver).drag_and_drop_by_offset(scroll_slider, 0, 500).perform()
    time.sleep(5)
    new_height = driver.execute_script("return arguments[0].scrollHeight;", member_container)
    if new_height == last_height:
        break

三、解决JS保护导致的内容无法获取问题

因为容器需要插件才能复制,直接用member_container.text可能拿不到完整内容,换成通过JS获取innerText或innerHTML:

# 替换原来的f.write(member_container.text)
container_content = driver.execute_script("return arguments[0].innerText;", member_container)
with open("S:/touhami/selenium_results.txt", "a", encoding='utf-8') as f:  # 用追加模式"a",避免覆盖之前内容
    f.write(container_content + "\n")

四、优化你的原有代码

把保存逻辑移到循环外(或者用追加模式),避免每次循环覆盖文件内容,同时确保滚动逻辑正确:

import time
from selenium.webdriver.common.by import By

# 假设你已经定位到member_container
member_container = driver.find_element(By.CSS_SELECTOR, "你的侧边栏容器选择器")

last_height = driver.execute_script("return arguments[0].scrollHeight;", member_container)
all_content = []

while True:
    # 直接滚动到底部
    driver.execute_script("arguments[0].scrollTop = arguments[0].scrollHeight;", member_container)
    time.sleep(5)
    
    # 获取当前容器内容(用JS绕过保护)
    current_content = driver.execute_script("return arguments[0].innerText;", member_container)
    all_content.append(current_content)
    
    new_height = driver.execute_script("return arguments[0].scrollHeight;", member_container)
    if new_height == last_height:
        break
    last_height = new_height

# 最后统一写入文件,去重(可选)
final_content = "\n".join(all_content)
with open("S:/touhami/selenium_results.txt", "w", encoding='utf-8') as f:
    f.write(final_content)

额外提示

  • 确认你定位的member_container是真正的滚动容器:有些页面的侧边栏外层是容器,实际滚动的是里面的子元素,用F12检查元素的overflow属性,找设置了overflow: auto或scroll的元素。
  • 如果还是不行,可以尝试用Keys.PAGE_DOWN模拟按键滚动,先让容器获得焦点,再按多次PAGE_DOWN:
member_container.send_keys(Keys.PAGE_DOWN)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.27 19:13:38