selenium操作下拉滚动条方法汇总

UI自动化中经常会遇到元素识别不到,找不到的问题,原因有很多,比如不在iframe里,xpath或id写错了等等;但有一种是在当前显示的页面元素不可见,拖动下拉条后元素就出来了。


方法一 使用js脚本直接操作

这里的id为滚动条的id,但js中没有xpath的方法,所以滚动条没有id的网页此方法不适用

js="var q=document.documentElement.scrollTop=10000"  # 滚动到最下面
js="var q=document.documentElement.scrollTop=0"  # 滚动到最上面
driver.execute_script(js)

方法二 使用js脚本拖动到提定地方

这个方法可以将滚动条拖动到需要显示的元素位置

target = driver.find_element_by_id("id_keypair")

driver.execute_script("arguments[0].scrollIntoView();", target)  # 拖动到可见的元素去

方法三 根据页面显示进行变通,发送tab键

在本例中的页面中,密码是输入框,正常手工操作时,可以通过tab键会切换到密码框中,所以根据此思路,在python中也可以发送tab键来切换,使元素显示

from selenium.webdriver.common.keys import Keys

driver.find_element_by_id("id_login_method_0").send_keys(Keys.TAB)

方法四 鼠标移动到目标元素上方

from selenium.webdriver.common.action_chains import ActionChains
 
ActionChains(self.driver).move_to_element(element).perform()
# 将鼠标移动到目标元素上方,适用于当前页面元素已加载完毕,但是在屏幕中看不到的情况。

方法五 滚动条操作

这个方法是从当前位置向下滚动100像素,而 window.scrollTo(0,100) 这个方法是从0滚动到100像素,这两个方法都是滚动操作,但是后面这个只会从0像素滚动到100像素,除非修改数值才可以滚动到对应像素位置,而我使用的则会一直向下滚动,希望不要弄混淆了。


def xh():
   t = True
   time.sleep(1)
   while t:
      driver.execute_script("window.scrollBy(0,1000)")
      try:
         driver.find_element('link_text', '没有更多推荐了,返回首页').click()
         time.sleep(1)
         t = False
      except:
         xh()
 
 
if __name__ == '__main__':
   driver = webdriver.Chrome()
   driver.get("https://blog.csdn.net/sily_z/article/details/80733267")

版权声明:本文为feiyu68原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。