失眠网,内容丰富有趣,生活中的好帮手!
失眠网 > web自动化:8.3 selenium中如何实现浏览器的窗口滚动

web自动化:8.3 selenium中如何实现浏览器的窗口滚动

时间:2022-08-31 01:22:24

相关推荐

web自动化:8.3 selenium中如何实现浏览器的窗口滚动

窗口滚动不属于网页的操作,属于窗口行为。实现窗口滚动,需要在selenium中发送js指令(参考:8.2 selenium中如何发送js指令)

使用场景:

1、存在懒加载的产品:不会一次性把所有东西加载出来,必须执行某个动作才会有新的东西出来(如:滚动条下拉,才会加载新的东西)

2、想点击或操作某个元素,但是这个元素在页面中看不到。需要先将元素拉到可视范围之内,才能点击。

介绍3种窗口滚动的方法:

方法一:坐标法

但是我们很少用这种方法,因为一般情况下不知道自己所定位的元素的像素点是多少。

window.scrollTo(0,1000) # f(x,y) x:横坐标,y:纵坐标,单位:xp(像素点)

练习1

from selenium import webdriverimport timedriver = webdriver.Chrome() # 初始化一个谷歌浏览器driver.maximize_window() # 浏览器窗口最大化driver.get("/topics") # 打开一个存在懒加载的网页time.sleep(5) # 等待一段时间,待页面加载出来再执行js代码# 方法一:坐标法driver.execute_script('window.scrollTo(0,1000)') # 横坐标不变,纵坐标 滚动到1000像素点time.sleep(2) # 等待一段时间,方便查看滚动的效果driver.execute_script('window.scrollTo(0,2000)') # 再滚动一次time.sleep(2) # 等待一段时间,方便查看滚动的效果

方法二:滚动到窗口底部,然后定位要找的元素

window.scrollTo(0,document.body.scrollHeight) # document.body.scrollHeight 当前窗口的高度

练习2

from selenium import webdriverimport timedriver = webdriver.Chrome() # 初始化一个谷歌浏览器driver.maximize_window() # 浏览器窗口最大化driver.get("/topics") # 打开一个存在懒加载的网页time.sleep(5) # 等待一段时间,待页面加载出来再执行js代码# 方法二:滚动到窗口底部# 拉到底部,但是有新的加载就会退回到三分之二的位置;加载出来后又跳到四分之一的位置driver.execute_script('window.scrollTo(0,document.body.scrollHeight)')time.sleep(2) # 等待一段时间,方便查看滚动的效果driver.execute_script('window.scrollTo(0,document.body.scrollHeight)') # 再继续滚动

方法三:将元素滚动到可视范围之内

场景:有时候元素在比较下面,需要先滚动下页面才能看到元素并点击

document.getElementById(“id”).scrollIntoView()

或者分成两行写:

el = document.getElementById(“id”)

el.scrollIntoView()

练习3

from selenium import webdriverimport timedriver = webdriver.Chrome() # 初始化一个谷歌浏览器driver.maximize_window() # 浏览器窗口最大化driver.get("/s?ie=UTF-8&wd=%E8%8A%B1%E9%9D%99%E9%80%B8") # 打开百度搜索“花静逸”的结果页time.sleep(5) # 等待一段时间,待页面加载出来再执行js代码# document.getElementsByClassName("pc")[1] # js指令:百度搜索结果页,定位页面底部翻页的元素“2”driver.execute_script('document.getElementsByClassName("pc")[1].scrollIntoView()')# 或者分成两行写driver.execute_script('el = document.getElementsByClassName("pc")[1]')driver.execute_script('el.scrollIntoView()')

注意:练习3中有个坑

getElementsByClassName 定位到的是一组元素,我们需要通过索引(从0开始)来取到元素“2”

如果觉得《web自动化:8.3 selenium中如何实现浏览器的窗口滚动》对你有帮助,请点赞、收藏,并留下你的观点哦!

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。