動態加載元素可以這樣獲取


昨天遇到了一個問題,在京東頁面,元素是動態加載的,這個怎么獲取呢?

今天總結下這個動態加載的元素獲取

因為京東這個網頁東西太多,元素也有很多,所以處理的為動態加載,何為動態加載呢?也就是說,滑動到可視區域后才會加載。那么有人可能會有疑問說什么是可視區域呢?

看圖說話:

 

 整個紅框就可以看成是可視區域,也就是說只有在這個可視區域里面元素才會加載

定位的是可視區域下面的元素,直接不經過處理就直接點擊的話肯定會報錯,引用顯示等待的不經過下拉滾動條也會報超時的錯誤

但是如果拉動滾動條的話又不知道拉多少,這可真是個問題呢

昨天中午花了點時間解決了下,下面寫寫我的解決思路吧

1、首先確認下我們的可視區域有多大?

2、我們一點一點的滑動這個滾動條,讓元素都加載出來,找到我們的元素之后就跳出循環。

好了,既然已經確定了我們的思路了,那就直接上代碼吧,以下代碼是保證這個元素在dom里面,不然會陷入死循環

from selenium import webdriver

from selenium.webdriver.common.by import By
from selenium.webdriver.common.keys import Keys
from selenium.webdriver.support import expected_conditions as EC
from selenium.webdriver.support.wait import WebDriverWait

driver = webdriver.Chrome()
driver.get('http://www.baidu.com')
driver.implicitly_wait(5)
driver.maximize_window()
ele = driver.find_element_by_id('kw')
ele.send_keys("京東商城", Keys.ENTER)
loc = (By.XPATH, '//a[contains(text(),"正品低價、品質保障")]')
WebDriverWait(driver, 20).until(EC.visibility_of_element_located(loc))
driver.find_element(*loc).click()
win = driver.window_handles
driver.switch_to.window(win[-1])
lo = (By.XPATH, '//h3[text()="逛好店"]')

while True:
    js = """
            var a = window.innerHeight;
            window.scrollBy(0, a*0.5);
    """
    driver.execute_script(js)
    try:
        WebDriverWait(driver, 3, 0.5).until(EC.visibility_of_element_located(lo))
        driver.find_element(*lo).click()
    except:
        pass
    else:
        break

是不是很簡單,只是加了一個while循環,這種是簡單版本的,復雜版本的就類似於要去計算整個滾動條,我需要去滑動多少次才能滑動到底,感覺還是直接寫一個死循環吧,達到條件就直接退出。


免責聲明!

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



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