在我們使用Python + selenium 的時候,會遇到如下報錯,原因是當頁面上的元素超過一屏后,想操作屏幕下方的元素,是不能直接定位到,會報元素不可見的。selenium.common.exceptions.WebDriverException: Message: unknown error: Element , )
這時候需要借助滾動條來拖動屏幕,使被操作的元素顯示在當前的屏幕上。滾動條是無法直接用定位工具來定位的。selenium里面也沒有直接的方法去控制滾動條,
借助Js: execute_script(),可以直接執行js的腳本。
一 、控制滾動條高度
#滾動條回到頂部:
js="var q=document.getElementById(‘id‘).scrollTop=0"
driver.execute_script(js)
#滾動條拉到底部
js="var q=document.documentElement.scrollTop=10000"
driver.execute_script(js)
#這里可以修改scrollTop 的值,來定位右側滾動條的位置,0是最上面,10000是最底部。
js="var q=document.documentElement.scrollTop=5000"
driver.execute_script(js)
二、控制橫向滾動
通過左邊控制橫向和縱向滾動條scrollTo(x, y)
js = "window.scrollTo(100,400);"
driver.execute_script(js)
第一個參數x是橫向距離,第二個參數y是縱向距離
附:
# 移動到元素element對象的“頂端”與當前窗口的“頂部”對齊
driver.execute_script("arguments[0].scrollIntoView();", element);
driver.execute_script("arguments[0].scrollIntoView(true);", element);
# 移動到元素element對象的“底端”與當前窗口的“底部”對齊
driver.execute_script("arguments[0].scrollIntoView(false);", element);
# 移動到頁面最底部
driver.execute_script("window.scrollTo(0, document.body.scrollHeight)");
# 移動到指定的坐標(相對當前的坐標移動)
driver.execute_script("window.scrollBy(0, 700)");
# 結合上面的scrollBy語句,相當於移動到700+=1600像素位置
driver.execute_script("window.scrollBy(0, 800)");
# 移動到窗口絕對位置坐標,如下移動到縱坐標1600像素位置
driver.execute_script("window.scrollTo(0, 1600)");
# 結合上面的scrollTo語句,仍然移動到縱坐標1200像素位置
driver.execute_script("window.scrollTo(0, 1200)");