前戲
在進行web自動化的時候,selenium只能找當前屏幕上的標簽,如果標簽在當前頁面沒顯示下,需要拖動滾動條才能查看到這個元素,這時候就要操作瀏覽器的滾動條,讓當前頁面顯示這個元素才可以操作,在我之前做web自動化的時候,也找了很多的操作瀏覽器的方法,有些由於瀏覽器或者版本的問題已經使用不了了,所以下面的方法大家自己去嘗試。
設置滾動條距離頂部的位置
from selenium import webdriver driver = webdriver.Chrome() driver.get('xxx') js = 'var action=document.documentElement.scrollTop=10000' # 設置滾動條距離頂部的位置,設置為 10000, 超過10000就是最底部 driver.execute_script(js) # 執行腳本 js = 'var action=document.documentElement.scrollTop=0' # 回到頂部
driver.execute_script(js)
driver.quit()
使用js的scrollTo函數
from selenium import webdriver import unittest, time class TestDemo(unittest.TestCase): def setUp(self): self.driver = webdriver.Chrome() def test_scroll(self): url = 'http://www.seleniumhq.org/' try: self.driver.get(url) # 使用js的scrollTo函數和document.body.scrollHeight參數 # 將頁面的滾動條滑動到頁面的最下方 self.driver.execute_script('window.scrollTo(1000,document.body.scrollHeight);') # 使用js的scrollIntoView函數將遮擋的元素滾動到可見屏幕上 # scrollIntoView(true)表示將元素滾動到屏幕中間 # scrollIntoView(false)表示將元素滾動到屏幕底部 self.driver.execute_script("document.getElementById('choice').scrollIntoView(true);") self.driver.execute_script("document.getElementById('choice').scrollIntoView(false);") time.sleep(3) # 使用js的scrollBy方法,使用0和400橫縱坐標參數, # 將屏幕向下滾動400像素 self.driver.execute_script('window.scrrollBy(0,400);') time.sleep(3) except Exception as e: print(e) def tearDown(self): self.driver.quit() if __name__ == '__main__': unittest.main()
橫向滾動條
在web自動化中,不只只有縱向滾動條,可能還有橫線滾動條
js ="window.scrollTo(100,400);" driver.execute_script(js) # 第一個參數 x 是橫向距離,第二個參數 y 是縱向距離
以上方法在 Firefox 上是可以的,但是用 Chrome 瀏覽器,發現不管用。谷歌瀏覽器就是這么任性,不聽話,於是用以下方法解決谷歌瀏覽器滾動條的問題。
js = "var q=document.body.scrollTop=0" driver.execute_script(js)
元素聚焦
雖然用上面的方法可以解決拖動滾動條的位置問題,但是有時候無法確定我需要操作的元素,這個時候我們可以先讓頁面直接跳到元素出現的位置,然后就可以操作了。同樣需要借助 JS 去實現
target = driver.find_element_by_xxxx() driver.execute_script("arguments[0].scrollIntoView();", target)
以上方法大家可以自己進行嘗試,試試哪種方法自己可以用