前言
有些網(wǎng)站使用了懶加載技術(shù):只有在瀏覽器中縱向滾動條滾動到指定的位置時番舆,頁面的元素才會被動態(tài)加載非春。注意御吞,在加載之前宽堆,selenium的page_source是不會包含該頁面的內(nèi)容郑原,page_source只包含加載出來的頁面內(nèi)容唉韭。那么如何實現(xiàn)加載全部內(nèi)容,就需要模擬人滾動滾動條的行為犯犁,實現(xiàn)頁面加載
代碼如下:
from selenium import webdriver
import time
driver_path = r"E:\chromedriver.exe"
def get_brower():
#創(chuàng)建瀏覽器驅(qū)動
chrome_options = webdriver.ChromeOptions()
chrome_options.add_argument("--start-maximized")
browser = webdriver.Chrome(executable_path=driver_path, options=chrome_options)
time.sleep(3)
return browser
def drop_down(url,browser):
#加載界面
browser.get(url)
#獲取頁面高度
height = browser.execute_script("return action=document.body.scrollHeight")
#將滾動條調(diào)到頁面底部
browser.execute_script("window.scrollTo(0,document.body.scrollHeight)")
time.sleep(5)
#定義一個初始時間戳
t1 = int(time.time())
num = 0
while True:
#獲取當前的時間戳
t2 = int(time.time())
# 判斷時間初始時間戳和當前時間戳相差是否大于30秒属愤,小于30秒則下拉滾動條
if t2 - t1 < 30:
new_height = browser.execute_script("return action=document.body.scrollHeight")
if new_height > height:
time.sleep(1)
browser.execute_script('window.scrollTo(0, document.body.scrollHeight)')
# 重置初始頁面高度
height = new_height
# 重置初始時間戳,重新計時
t1 = int(time.time())
elif num < 3: # 當超過30秒頁面高度仍然沒有更新時酸役,進入重試邏輯住诸,重試3次,每次等待20秒
time.sleep(20)
num = num + 1
else: # 超時并超過重試次數(shù)涣澡,程序結(jié)束跳出循環(huán)贱呐,并認為頁面已經(jīng)加載完畢!
print("滾動條已經(jīng)處于頁面最下方入桂!")
# 滾動條調(diào)整至頁面頂部
browser.execute_script('window.scrollTo(0, 0)')
break
if __name__ == '__main__':
browser = get_brower()
url = "https://www.iqiyi.com/"
drop_down(url,browser)