使用Python+Selenium遇JavascriptException:arguments[0].scrollTo不是函数
问题排查与解决方案
错误原因
报错arguments[0].scrollTo is not a function的核心问题是:你传入的scrollable_element不支持scrollTo方法。scrollTo是Window对象或文档根滚动元素的专属方法,普通DOM元素(即使是可滚动容器)并不自带这个方法,你混淆了全局滚动和元素内滚动的API。
修复方案
方案1:使用scrollTop属性(兼容性最优)
普通可滚动元素(比如设置了overflow: scroll/auto的div)通过修改scrollTop属性来控制滚动位置,替换执行脚本即可:
def scroll_slow(self, scrollable_element, start=0, end=3600, step=100, reverse=False): if reverse: start, end = end, start step = -step for i in range(start, end, step): # 改用scrollTop属性设置元素内滚动位置 self.browser.execute_script("arguments[0].scrollTop = {};".format(i), scrollable_element) time.sleep(random.uniform(1.0, 2.6))
方案2:使用现代元素scroll方法(更灵活)
如果目标浏览器支持ES6+,可以用element.scroll()方法,支持更多参数(比如平滑滚动,不过你已添加sleep,可按需选择):
def scroll_slow(self, scrollable_element, start=0, end=3600, step=100, reverse=False): if reverse: start, end = end, start step = -step for i in range(start, end, step): self.browser.execute_script("arguments[0].scroll({top: {}});".format(i), scrollable_element) time.sleep(random.uniform(1.0, 2.6))
额外排查点
- 确认
scrollable_element确实是页面上的可滚动容器:打开开发者工具,检查该元素是否设置了overflow: scroll或overflow: auto,且内容高度超过元素本身高度。 - 确保元素未过期:如果页面中途刷新或DOM重新渲染,之前获取的
scrollable_element会失效,需要重新定位。
内容的提问来源于stack exchange,提问作者NovaSec
相关产品推荐
相关产品推荐

