Python Selenium滾動頁面定位元素位置

分享知識  傳遞快樂

 

當頁面上的元素超過一屏幕後,想要繼續操作屏幕下方的元素,是不能直接定位到,會報元素不可見的。如:

driver.find_element_by_id("id").click()
# 或
WebDriverWait(webdriver, 3).until(expected_conditions.presence_of_element_located((By.ID, "id"))).click()

這時候需要藉助滾動條來拖動屏幕,使被操作的元素顯示在當前的屏幕上。滾動條是無法直接用定位工具來定位的。Selenium 裏面也沒有直接的方法去控制滾動條,這時候只能藉助 JS 來完成了,可以用 selenium 提供的 execute_script() 方法操作,就可以直接執行 JS 腳本。

 

1、使用 JS 腳本操作

通過修改 scrollTop 的值,來定位右側滾動條的位置,0是最上面,100000是最底部。

js="document.getElementById('id').scrollTop=100000" 
driver.execute_script(js) 

js="document.documentElement.scrollTop=100000"
driver.execute_script(js)

還可以通過左邊控制橫向和縱向滾動條 scrollTo(x, y) 操作頁面。

driver.execute_script("window.scrollBy(0,100000)")

 

2、元素聚焦

雖然用上面的方法可以解決拖動滾動條的位置問題,但是有時無法確定需要操作的元素位置,每次打開的頁面有可能也不一樣,同樣元素所在的位置也有可能不一樣,這時我們可以讓頁面跳到元素的位置,就可以繼續操作了。同樣還需要藉助 JS 去實現。

target = driver.find_element_by_id("id")
driver.execute_script("arguments[0].scrollIntoView();", target)

target = WebDriverWait(driver, 3).until(expected_conditions.presence_of_element_located((By.ID, "id")))
driver.execute_script("arguments[0].scrollIntoView();", target)


3、通過 tab 鍵定位元素

此操作一般在輸入框或菜單等,可以通過 tab 鍵會切換到不同輸入框中菜單上。如:

from selenium.webdriver.common.keys import Keys
driver.find_element_by_id("id").send_keys(Keys.TAB)

 

4、通過定位元素附近選擇器或標籤等定位元素

driver.find_element_by_xpath("//div[contains(@id,'id')]/div").click()

 

 

 

 

 

 

 

—————————
如有不足請留言指正
相互學習,共同進步

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章