12、js处理web页面滚动条
应用场景:当页面上的元素超过一屏后,待操作的元素在页面可视区域外时,是不能直接定位到,会报元素不可见错误:is not clickable at point!!
解决办法:要将待操作的元素滚动到可视区域当中,这时候需要借助滚动条来拖动屏幕,使被操作的元素显示在当前的屏幕上。
滚动条是无法直接用定位工具来定位的,selenium 里面也没有直接的方法去控制滚动条,但 selenium 提供了一个操作 js 的方法:execute_script(),可以直接执行 js 的脚本
1.先找要将要操作的元素
element = driver.find_element_by_xxxx("XXXX")
2.再将元素滑动到可视区域:通过执行javaScript语句实现
driver.execute_script("arguments[0].scrollIntoView();",element)
3.再操作元素
element.XXX()
以下是移动的四种方式
1.移动到元素element对象的“底端”与当前窗口的“底部”对齐 driver.execute_script("arguments[0].scrollIntoView(false);",element) |
2.移动到元素element对象的“顶端”与当前窗口的“顶部”对齐 driver.execute_script("arguments[0].scrollIntoView();",element) |
3.移动到页面底部 driver.execute_script("window.scrollTo(0,document.body.scrollHeight)") |
4.移动到页面顶部 driver.execute_script("window.scrollTo(0,document.body.scrollHeight,0)") 针对Chrome浏览器用下面 driver.execute_script("window.scrollTo(0,document.body.scrollTop,0)")
|
from selenium import webdriver from selenium.webdriver.common.keys import Keys import time driver=webdriver.Chrome() driver.get("https://www.baidu.com/") driver.maximize_window() driver.find_element_by_id("kw").send_keys("selenium",Keys.ENTER) time.sleep(5) #第一步:先定位到元素:如果有时候找不到元素有时候能找到,说明是有时候元素没有加载出来,在上一步操作之后加一个时间等待页面加载完成 ele =driver.find_element_by_xpath('//a[@class="n"]') #定位页面底部的“下一页” ele1=driver.find_element_by_link_text("资讯") #定位页面顶部的“资讯” # #第二步:将元素移动到可视区域 driver.execute_script("arguments[0].scrollIntoView();",ele) time.sleep(3) driver.execute_script("arguments[0].scrollIntoView(false);",ele1) # # 第三步,操作元素 ele1.click() time.sleep(3) driver.execute_script("window.scrollTo(0,document.body.scrollHeight)") #移动到页面底部 time.sleep(3) driver.execute_script("window.scrollTo(0,document.body.scrollTop,0)") #移动到页面顶部