Selenium處理頁面懶加載方法


在做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

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM