转载 

python selenium chrome 控制浏览器滚动条缓慢下拉到最底

分类:python,selenium    536人阅读    IT小君  2021-09-03 22:59

用selenium 爬取网站数据,有些网站的的数据是ajax动态加载,要缓慢分段下拉才可以获取到数据,如果连续用执行js语句'window.scrollTo(0,document.body.scrollHeight)'

会导致浏览器迅速直接拉到底,中间遗失数据。
代码实现思路:
首先获取当前窗口总高度
然后每次下拉100 像素,拉到最底;
只是如果又有新的页面内容加载,高度会变大,这时比较原高度与现在高度是否相同,如果不同,在每次100 像素下拉,直到没有新的内容加载。

这里以蘑菇街为例:蘑菇街如果直接拉到底他会什么数据页加载不了

import time
from selenium import webdriver

driver = webdriver.Chrome()
driver.get("https://www.mogu.com/")
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

def scroll_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)
点击广告,支持我们为你提供更好的服务

html5 svg夜空中星星流星动画场景特效

HTML5现代家居装潢公司网站模板

有机水果蔬菜HTML5网站模板

jQuery右端悬浮带返回顶部特效

html5图标下拉搜索框自动匹配代码

HTML5 Canvas竖直流动线条背景动画特效

css鼠标跟随文字模糊特效

现代时尚家具公司网站模板

中小型创意设计服务公司网站模板

响应式咖啡饮品宣传网站模板

网页设计开发公司网站模板

html5 canvas彩色碎片组合球形旋转动画特效

响应式时尚单品在线商城网站模板

HTML5数字产品服务公司网站模板

css+js实现的颜色渐变数字时钟动画特效

小众时尚单品在线电子商务网站模板

canvas炫酷鼠标移动文字粒子特效

js+css3抽奖转盘旋转点餐代码

响应式太阳能能源公司网站模板

html5 canvas进度条圆环图表统计动画特效

点击广告,支持我们为你提供更好的服务
 工具推荐 更多»
点击广告,支持我们为你提供更好的服务