【Python自动化】之利用JS操作页面滚动条(新)
如何操作页面中的滚动条,有以下几个方法:
一、查找可见元素进行滚动页面(通用)
方法一:
①移动到元素element对象的”顶端“,与当前窗口的”顶部“对齐(默认true)
scrollIntoView_js = "arguments[0].scrollIntoView();" 或 scrollIntoView_js = "arguments[0].scrollIntoView(true);"
# 下滑到可见元素 scrollIntoView_js = "arguments[0].scrollIntoView();"
# 确定按钮 sortSureBtn_loc = (By.CSS_SELECTOR, ".footer>button.el-button--primary")
# 查找可见元素进行下滑,滑动至最下面的按钮 self.executeScript(loc.scrollIntoView_js, loc.sortSureBtn_loc)
结果:
②移动到元素element对象的“底端”,与当前窗口的“底部”对齐
scrollIntoView_js = "arguments[0].scrollIntoView(false);"
# 下滑到可见元素 scrollIntoView_js = "arguments[0].scrollIntoView(false);" # 确定按钮 sortSureBtn_loc = (By.CSS_SELECTOR, ".footer>button.el-button--primary") # 查找可见元素进行下滑,滑动至最下面的按钮 self.executeScript(loc.scrollIntoView_js, loc.sortSureBtn_loc)
结果:
方法二:
location_once_scrolled_into_view,此方法把某个元素滚动到可视范围内
def webDriverWait(self, loc): """显式等待,查找单元素""" WebDriverWait(self.driver, 10).until(EC.visibility_of_element_located(loc)) return self.find_element(loc) def el_View(self, loc): """滑动到可见的元素""" self.webDriverWait(loc).location_once_scrolled_into_view # 确定按钮 sortSureBtn_loc = (By.CSS_SELECTOR, ".footer>button.el-button--primary") # 查找可见元素进行下滑,滑动至最下面的按钮 self.el_View(loc.sortSureBtn_loc)
二、下滑页面内嵌的滚动条(内嵌)
首先定位此滚轮在页面哪个标签下,class="boxcontainer"
def executeScript(self, js, loc): """执行JS元素""" sleep(1) if loc == None: return self.driver.execute_script(js) else: return self.driver.execute_script(js, self.webDriverWait(loc)) # 下滑内嵌滚动条 scrollTop_js = "var q = document.getElementsByClassName('boxcontainer')[0].scrollTop=10000" # 下滑内嵌滚动条 self.executeScript(loc.scrollTop_js, None)
三、 浏览器自带外边的滚动条滑动(外嵌)
①滚动条下拉距离
window.scrollBy(0,100)
# 或者
var q=document.documentElement.scrollTop=10000
②滚动条上拉距离
window.scrollBy(0,-100):
# 或者
var q=document.documentElement.scrollTop=0
③滚动条滑到底部
window.scrollTo(0,document.body.scrollHeight)
④滚动条滑到顶部
window.scrollTo(document.body.scrollHeight,0)
四、附录
①感谢幸运球与倒霉蛋的《selenium中元素操作之浏览器窗口滚动&网页日期控件操作(js操作)(五)》
②感谢存在在你眼里的《python+selenium 滚动条/内嵌滚动条循环下滑,判断是否滑到最底部》
不积跬步,无以致千里;不集小流,无以成江海。
如转载本文,请还多关注一下我的博客:https://www.cnblogs.com/Owen-ET/;
我的Github地址:https://github.com/Owen-ET————————————
无善无恶心之体, 有善有恶意之动, 知善知恶是良知, 为善去恶是格物。