一些網站在訪問時不會一次加載所有元素,需要下拉至底部后等待刷新更多元素出來,利用selenium執行js代碼滾動頁面,每次重新獲取頁面高度,直到頁面高度不再變化。
js='return document.body.scrollHeight;'
height=0
while True: new_height = driver.execute_script(js) if new_height > height: driver.execute_script('window.scrollTo(0, document.body.scrollHeight)') height = new_height time.sleep(5) else: print("滾動條已經處於頁面最下方!") driver.execute_script('window.scrollTo(0, 0)')#頁面滾動到頂部 break
這是通用的做法,對於具體的網站可以做一些針對性變化,比如,某網站頁面初始載入比較慢,利用某個元素判斷是否已加載完成
total=browser.find_element_by_id('total').text#判斷元素是否已加載 while total == '': time.sleep(1) total=browser.find_element_by_id('total').text
然后開始循環下拉載入所有元素,利用元素屬性判斷是否已加載,
當全部載入完畢后,頁面底部會有提示,利用這個元素判斷是否已載入完畢
is_done=browser.find_element_by_id('loading').text while is_done == '': browser.execute_script('window.scrollTo(0, document.body.scrollHeight)')#一擼到底 is_ready=browser.find_element_by_id('loading').get_attribute('class') while is_ready == 'tc mt-10':#判斷下拉頁面是否刷新 time.sleep(1) is_ready=browser.find_element_by_id('loading').get_attribute('class') is_done=browser.find_element_by_id('loading').text#當頁面底部提示出現,表示已經加載全部元素 if is_done != '': break
print("滾動條已經處於頁面最下方!")