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

Selenium执行driver.execute_script获取window.pageYOffset返回0与实际不符问题

Selenium获取window.pageYOffset始终为0的解决方案
  • 执行上下文指向错误iframe
    Selenium默认在最顶层window执行JS脚本,如果页面实际滚动的内容在嵌套的iframe内,顶层window的滚动偏移自然为0。需要先切换到对应iframe再取值:
from selenium.webdriver.common.by import By
# 定位到滚动内容所属的iframe元素
target_iframe = driver.find_element(By.CSS_SELECTOR, "替换为你的iframe选择器")
driver.switch_to.frame(target_iframe)
# 此时获取的就是iframe内的滚动偏移
print("!!!:" + str(driver.execute_script("return window.pageYOffset;")))
# 后续要操作外层页面时记得切回默认上下文
driver.switch_to.default_content()
  • 未等待滚动动作执行完成就取值
    如果代码执行滚动操作后立刻获取偏移,页面滚动动画还未结束就执行了JS脚本,会拿到滚动前的0值。可以添加等待逻辑验证:
from time import sleep
# 执行滚动操作后先等待1秒,生产环境建议换成显式等待判断滚动完成
driver.execute_script("window.scrollTo(0, 1600)")
sleep(1)
print(driver.execute_script("return window.pageYOffset;"))
  • 滚动区域是自定义容器而非全局window
    很多单页应用的可滚动区域是指定的div元素,而非整个浏览器窗口,此时window.pageYOffset永远为0,需要单独获取该容器的scrollTop属性:
from selenium.webdriver.common.by import By
# 替换为实际滚动的div容器的选择器
scroll_box = driver.find_element(By.CSS_SELECTOR, "替换为滚动容器的选择器")
offset = driver.execute_script("return arguments[0].scrollTop;", scroll_box)
print("!!!:" + str(offset))
  • 当前绑定的窗口不匹配
    如果同时打开了多个标签页或浏览器窗口,Selenium当前绑定的窗口不是你手动验证的那个窗口,也会出现取值不一致的问题,需要先切换到对应窗口再执行操作。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.02 21:18:00