應用場景:當頁面上的元素超過一屏后,待操作的元素在頁面可視區域外時,是不能直接定位到,會報元素不可見錯誤: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)") #移動到頁面頂部