python selenium判断网页加载,python+selenium采集动态加载(懒加载)的页面内容
发布日期:2022-02-03 04:38:31 浏览次数:11 分类:技术文章

本文共 1414 字,大约阅读时间需要 4 分钟。

前言

有些网站使用了懒加载技术:只有在浏览器中纵向滚动条滚动到指定的位置时,页面的元素才会被动态加载。注意,在加载之前,selenium的page_source是不会包含该页面的内容,page_source只包含加载出来的页面内容。那么如何实现加载全部内容,就需要模拟人滚动滚动条的行为,实现页面加载

代码如下:

from selenium import webdriver

import time

driver_path = r"E:\chromedriver.exe"

def get_brower():

#创建浏览器驱动

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")

#将滚动条调到页面底部

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: # 超时并超过重试次数,程序结束跳出循环,并认为页面已经加载完毕!

print("滚动条已经处于页面最下方!")

# 滚动条调整至页面顶部

browser.execute_script('window.scrollTo(0, 0)')

break

if __name__ == '__main__':

browser = get_brower()

url = "https://www.iqiyi.com/"

drop_down(url,browser)

转载地址:https://blog.csdn.net/weixin_30596151/article/details/116165729 如侵犯您的版权,请留言回复原文章的地址,我们会给您删除此文章,给您带来不便请您谅解!

上一篇:php验证密码没有特殊符号,JS 验证密码 不能为空,必须含有数字、字母、特殊字符,长度在8-12位...
下一篇:php会话管理实验心得,总结10篇常用的会话控制实例

发表评论

最新留言

路过,博主的博客真漂亮。。
[***.116.15.85]2024年04月04日 22时56分40秒

关于作者

    喝酒易醉,品茶养心,人生如梦,品茶悟道,何以解忧?唯有杜康!
-- 愿君每日到此一游!

推荐文章

spring boot 与 Ant Design of Vue 实现获取用户列表(二十七) 2019-04-27
spring boot 与 Ant Design of Vue 实现新增用户(二十八) 2019-04-27
spring boot 与 Ant Design of Vue 实现修改用户(二十九) 2019-04-27
spring boot 与 Ant Design of Vue 实现删除用户(三十) 2019-04-27
spring boot 与 Ant Design of Vue 鉴权体系登录的实现(三十一) 2019-04-27
spring boot 与 Ant Design of Vue 鉴权体系获取用户信息的实现(三十二) 2019-04-27
Druid连接池实现自定义场景的多数据库的连接 2019-04-27
CentOs7命令行(静默)的方式安装oracle数据库 2019-04-27
基于VMware安装CentOs7的镜像 2019-04-27
PL/SQL数据库管理工具的使用 2019-04-27
带你玩转属于自己的spring-boot-starter系列(一) 2019-04-27
带你玩转属于自己自己的spring-boot-starter系列(二) 2019-04-27
带你玩转属于自己的spring-boot-starter系列(三) 2019-04-27
基于SnowFlake算法如何让分库分表中不同的ID落在同一个库的算法的实现 2019-04-27
基于springboot的ShardingSphere5.X的分库分表的解决方案之分库解决方案(二) 2019-04-27
基于springboot的ShardingSphere5.X的分库分表的解决方案之分表解决方案(一) 2019-04-27
基于springboot的ShardingSphere5.X的分库分表的解决方案之关联查询解决方案(三) 2019-04-27
基于springboot的ShardingSphere5.X的分库分表的解决方案之基于seata的分布式事务的解决方案(十五) 2019-04-27
Linux文件管理参考 2019-04-27
FTP文件管理项目(本地云)项目日报(一) 2019-04-27