在做selenium webdriver 在做UI自動化時,有些頁面時使用懶加載的形式顯示頁面圖片,如果在不向下移動滾動條時,獲取到的圖片會是網站的默認圖片和真實的圖片不相符。
1.滑動滾動條
1.1如果滾動條是針對整個HTML可以用如下方式:
js = "var q=document.documentElement.scrollTop=10000" # documentElement表示獲取根節點元素 self.driver.execute_script(js)
1.2如果滾動條是針對整個body可以用如下方式:
js = "var q=document.body.scrollTop=10000" # documentElement表示獲取body節點元素 self.driver.execute_script(js)
1.3如果滾動條是針對某個div可以用如下方式:該頁面的滾動條就是針對class='main'的div而言的
js = "var q=document.getElementsByClassName('main')[0].scrollTop = 10000" # getElementsByClassName表示獲取class='main'的元素列表,0表示第一個,所以使用的時候要加索引 self.driver.execute_script(js)
當元素在中間時不太方便
2.按下鍵方式(沒有測試過,建議使用3)
driver.find_element_by_xpath("//*[@id='wrapper_wrapper']").send_keys(Keys.DOWN)
3.定位到元素處
ActionChains(driver).move_to_element(listbox).perform()
建議使用3方便快捷 ,一般與頁面顯示等待結合使用,下面為代碼例子
from selenium import webdriver from selenium import common from selenium.webdriver.common.by import By from selenium.webdriver.support.ui import WebDriverWait from selenium.webdriver.support import expected_conditions as EC from selenium.webdriver.common.action_chains import ActionChains
driver = webdriver.Chrome()
driver.get(url)
# 頁面分段加載,鼠標懸浮在某元素上
listbox = driver.find_element(By.XPATH, "//div[@role='listbox']")
ActionChains(driver).move_to_element(listbox).perform()
element = WebDriverWait(driver, 10).until(
EC.presence_of_element_located((By.XPATH, "//div[@role='listbox']//figure//img"))
)
html = driver.page_source