用selenium 爬取**資料,有些**的的資料是ajax動態載入,要緩慢分段下拉才可以獲取到資料,如果連續用執行js語句'window.scrollto(0,document.body.scrollheight)'
會導致瀏覽器迅速直接拉到底,中間遺失資料。
**實現思路:
首先獲取當前視窗總高度
然後每次下拉100 畫素,拉到最底;
只是如果又有新的頁面內容載入,高度會變大,這時比較原高度與現在高度是否相同,如果不同,在每次100 畫素下拉,直到沒有新的內容載入。
這裡以蘑菇街為例:蘑菇街如果直接拉到底他會什麼資料頁載入不了
import time
from selenium import webdriver
driver = webdriver.chrome(
)driver.get(
"")time.sleep(1)
# 執行這段**,會獲取到當前視窗總高度
js =
"return action=document.body.scrollheight"
# 初始化現在滾動條所在高度為0
height =
0# 當前視窗總高度
new_height = driver.execute_script(js)
while height < new_height:
# 將滾動條調整至頁面底部
for i in
range
(height, new_height,
100)
: driver.execute_script(
'window.scrollto(0, {})'
.format
(i))
time.sleep(
0.5)
height = new_height
time.sleep(2)
new_height = driver.execute_script(js)
driver.quit(
)
把**封裝到函式復用
import time
defscroll_to_bottom
(driver)
: js =
"return action=document.body.scrollheight"
# 初始化現在滾動條所在高度為0
height =
0# 當前視窗總高度
new_height = driver.execute_script(js)
while height < new_height:
# 將滾動條調整至頁面底部
for i in
range
(height, new_height,
100)
: driver.execute_script(
'window.scrollto(0, {})'
.format
(i))
time.sleep(
0.5)
height = new_height
time.sleep(2)
new_height = driver.execute_script(js)
selenium基礎(控制瀏覽器)
python基礎 控制瀏覽器 控制瀏覽器 from selenium import webdriver import time from selenium.webdriver.common.keys import keys 引入keys方法包,用於鍵盤操作 from selenium.webdriv...
selenium模組控制瀏覽器
利用selenium模組控制瀏覽器 匯入selenium模組 from selenium import webdriver browserfirefox webdriver.firefox 開啟firefox瀏覽器,返回乙個webdriver物件 browserfirefox.get webdriv...
Selenium 瀏覽器滾動條操作
在用selenium做web自動化時,經常會碰到要定位的元素不在當前屏,需要拖動瀏覽器的滾動條才能顯示出來。如果直接去定位的話,一定會報元素不存在的錯誤。那麼怎麼對瀏覽器的滾動條進行操作呢?webdriver不能定位到瀏覽器的滾動條,只有通過execute script 來執行js指令碼,達到操作滾...