在平时的测试中,有可能需要定位的元素,不在当前的画面内,就会对滚动条产生一定的操作。对滚动条的操作,实际上也是selenuim对JS的一种操作,正因为selenuim可以对js进行操作,也就有了极大的操作空间
本文主要介绍两个方法:
scrollTo(x,y)
x表示横向距离,y表示纵向距离
其中 x,y的距离,都是以(0,0)为起点的
对比scrollBy() 则是相对当前位置滚动的
scrollIntoView()
函数将被遮挡的元素滚动到可见的屏幕上
scrollIntoView(true)将元素滚动到屏幕中间
scrollIntoView(false)将元素滚动到屏幕底部
实验例子:打开百度,搜索selenuim,并拉动页面的滚动条。
from selenium import webdriver import time if __name__ == '__main__': driver = webdriver.Chrome() driver.get("https://www.baidu.com/") driver.maximize_window() driver.find_element_by_id("kw").send_keys("selenium") driver.find_element_by_id("su").click() time.sleep(3) ''' scrollTo(x,y) x表示横向距离,y表示纵向距离 其中 x,y的距离,都是以(0,0)为起点的 对比scrollBy() 则是相对当前位置滚动的 ''' # 将页面拉到最下方,添加等待时间方便在窗口看结果 print("将页面拉到最下方") time.sleep(5) driver.execute_script("window.scrollTo(0,document.body.scrollHeight);") # 将页面拉到最上方 print("将页面拉到最上方") time.sleep(5) driver.execute_script("window.scrollTo(0,0);") time.sleep(5)
# 将页面向下拉取400像素 print("将页面向下拉取400像素") time.sleep(5) driver.execute_script("window.scrollTo(0,400);") ''' scrollIntoView函数将被遮挡的元素滚动到可见的屏幕上 scrollIntoView(true)将元素滚动到屏幕中间 scrollIntoView(false)将元素滚动到屏幕底部 ''' # 将搜索selenium的结果页面的底部page滚动到屏幕中间 print("将搜索selenium的结果页面的底部page滚动到屏幕中间") time.sleep(5) driver.execute_script("document.getElementById('page').scrollIntoView(true)")
总结:拉动滚动条,其实也是一个操作js的过程,如果有其他的js语句需要执行,也可以采用 driver.execute_script(“js语句”)的方式