selenium--浏览器滚动条操作
前戏
在进行web自动化的时候,selenium只能找当前屏幕上的标签,如果标签在当前页面没显示下,需要拖动滚动条才能查看到这个元素,这时候就要操作浏览器的滚动条,让当前页面显示这个元素才可以操作,在我之前做web自动化的时候,也找了很多的操作浏览器的方法,有些由于浏览器或者版本的问题已经使用不了了,所以下面的方法大家自己去尝试。
设置滚动条距离顶部的位置
from selenium import webdriver driver = webdriver.Chrome() driver.get('xxx') js = 'var action=document.documentElement.scrollTop=10000' # 设置滚动条距离顶部的位置,设置为 10000, 超过10000就是最底部 driver.execute_script(js) # 执行脚本 js = 'var action=document.documentElement.scrollTop=0' # 回到顶部
driver.execute_script(js)
driver.quit()
使用js的scrollTo函数
from selenium import webdriver import unittest, time class TestDemo(unittest.TestCase): def setUp(self): self.driver = webdriver.Chrome() def test_scroll(self): url = 'http://www.seleniumhq.org/' try: self.driver.get(url) # 使用js的scrollTo函数和document.body.scrollHeight参数 # 将页面的滚动条滑动到页面的最下方 self.driver.execute_script('window.scrollTo(1000,document.body.scrollHeight);') # 使用js的scrollIntoView函数将遮挡的元素滚动到可见屏幕上 # scrollIntoView(true)表示将元素滚动到屏幕中间 # scrollIntoView(false)表示将元素滚动到屏幕底部 self.driver.execute_script("document.getElementById('choice').scrollIntoView(true);") self.driver.execute_script("document.getElementById('choice').scrollIntoView(false);") time.sleep(3) # 使用js的scrollBy方法,使用0和400横纵坐标参数, # 将屏幕向下滚动400像素 self.driver.execute_script('window.scrrollBy(0,400);') time.sleep(3) except Exception as e: print(e) def tearDown(self): self.driver.quit() if __name__ == '__main__': unittest.main()
横向滚动条
在web自动化中,不只只有纵向滚动条,可能还有横线滚动条
js ="window.scrollTo(100,400);" driver.execute_script(js) # 第一个参数 x 是横向距离,第二个参数 y 是纵向距离
以上方法在 Firefox 上是可以的,但是用 Chrome 浏览器,发现不管用。谷歌浏览器就是这么任性,不听话,于是用以下方法解决谷歌浏览器滚动条的问题。
js = "var q=document.body.scrollTop=0" driver.execute_script(js)
元素聚焦
虽然用上面的方法可以解决拖动滚动条的位置问题,但是有时候无法确定我需要操作的元素,这个时候我们可以先让页面直接跳到元素出现的位置,然后就可以操作了。同样需要借助 JS 去实现
target = driver.find_element_by_xxxx() driver.execute_script("arguments[0].scrollIntoView();", target)
以上方法大家可以自己进行尝试,试试哪种方法自己可以用
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
· 理解Rust引用及其生命周期标识(上)
· 浏览器原生「磁吸」效果!Anchor Positioning 锚点定位神器解析
· 没有源码,如何修改代码逻辑?
· 分享4款.NET开源、免费、实用的商城系统
· 全程不用写代码,我用AI程序员写了一个飞机大战
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· 白话解读 Dapr 1.15:你的「微服务管家」又秀新绝活了
· 上周热点回顾(2.24-3.2)