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

如何在Python版Selenium中操作Javascript渲染的自定义滚动条

纯Selenium实现方案

你遇到的是Angular CDK虚拟滚动组件的独立容器滚动条,之前操作失败的核心原因是window.scrollTo操作的是全局窗口滚动,而非这个独立容器的滚动属性,直接修改transform样式会绕过CDK的滚动监听逻辑,自然无法触发内容渲染。以下是可直接落地的实现方法:

方案1:直接修改滚动容器的scrollTop属性

你已经定位到的cdk-virtual-scroll-viewport就是实际的滚动容器,直接通过JS修改它的原生滚动属性即可触发正常的内容加载:

# 你之前定位到的滚动容器元素
scroll_container = browser.find_element(By.XPATH, '''/html/body/ess-root/core-ui-theme/ess-core-layout/pol-layout/pol-content/ess-employee-list-page/
div/div/ess-employee-cards-container/cdk-virtual-scroll-viewport''')
# 直接修改容器滚动高度,会自动触发CDK的内容渲染逻辑
browser.execute_script('arguments[0].scrollTop = 300', scroll_container)

如果需要滚动到底部,直接赋值arguments[0].scrollTop = arguments[0].scrollHeight即可。

方案2:先聚焦容器再触发滚动事件

和你用pyautogui聚焦后滚动的逻辑一致,纯Selenium也可以实现聚焦后触发滚动:

from selenium.webdriver.common.action_chains import ActionChains
from selenium.webdriver.common.keys import Keys

scroll_container = browser.find_element(By.XPATH, '''/html/body/ess-root/core-ui-theme/ess-core-layout/pol-layout/pol-content/ess-employee-list-page/
div/div/ess-employee-cards-container/cdk-virtual-scroll-viewport''')
# 先点击聚焦滚动容器
scroll_container.click()
# 发送翻页/向下按键触发滚动,也可以按多次实现滚动指定距离
ActionChains(browser).send_keys(Keys.PAGE_DOWN).perform()

方案3:调用元素原生滚动方法

也可以直接调用DOM元素自带的scrollBy方法实现滚动:

scroll_container = browser.find_element(By.XPATH, '''/html/body/ess-root/core-ui-theme/ess-core-layout/pol-layout/pol-content/ess-employee-list-page/
div/div/ess-employee-cards-container/cdk-virtual-scroll-viewport''')
# 相对当前位置向下滚动300像素
browser.execute_script('arguments[0].scrollBy(0, 300)', scroll_container)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.26 15:39:04