分享知識 傳遞快樂
當頁面上的元素超過一屏幕後,想要繼續操作屏幕下方的元素,是不能直接定位到,會報元素不可見的。如:
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()
—————————
如有不足請留言指正
相互學習,共同進步