01awzh 发表于 2023-8-7 21:14

python如何准确判断网页加载完毕,如何应对系统卡顿?

本帖最后由 01awzh 于 2023-8-8 10:47 编辑

菜鸟一枚,自己 编了个程序,使用selenium+openpyxl去做自动填充网页上表单的程序。(这个网页表单填充程序运行在win7 32位的系统、ie8浏览器,这个操作环境无法改变)

目前遇到最大的问题就是无法准确判断出网页是否已经加载完毕。


不想去无脑time.sleep,那样太浪费程序的运行时间了,效率太低了,碰到服务器卡顿的时候,可能等待一个页面加载就需要至少30秒


最开始用selenium自带的显示等待去解决。。。WebDriverWait().until(EC.presence_of_element_located((By.)))这个有BUG,设置BY.XPATH(等待指定路径元素加载完毕)或者BY.ID(等待指定ID元素加载完毕),会出现 一个问题:::就是页面已经加载完毕了,但是就是找不到,自己编的程序直接卡死


又想了一个方法:::跑一个while的死循环,寻找div数组:search_div = browser.find_elements(By.TAG_NAME,'div')   ,当数组长度大于0时,代表了至少找到了一个div,此时就判断页面加载完毕,跳出该死循环,开始执行下一步。
如果div数组长度是0,那么就等待time.sleep一秒,再寻找div数组。
这个方法还是不行,有时候页面已经加载完了,还是div数组长度还是0.


又又想了一个法子:::去拦截post返回的数据,如果拦截到指定的返回数据就判断页面加载完毕,可是这里不太清楚怎么弄,有大神有详细一点的教程吗
或者有有没有什么更好的法子去准确判断页面加载完毕?


这个要往里录入表单的系统还容易弹出各种弹窗,或者有时候浏览器直接崩溃掉,崩溃后就只能重新刷新界面,总而言之这个系统真的相当容易卡顿,一旦卡顿可能会卡死好几分钟甚至更长时间才能缓过来。


在这个系统里填表真是糟老罪了,数据量还超大,还望大神详细指点一下如何应对这种卡顿的系统


又简单尝试了一下seleniumwire,现在我用的是selenium3.4版本,那台电脑只能离线的状态下安装seleniumwire库,可没有找到合适的seleniumwire库


lx19960103 发表于 2023-8-7 21:14

同感,目前我的解决办法是用time.sleep,有时候确实不准,遇到特殊情况,就会死掉,我是直接捕获异常,然后在异常里重新执行的,多试几次总比直接中断好吧。

01awzh 发表于 2023-8-8 15:18

seleniumwire能一直监听网络请求吗?感觉也会出现一个问题,就是由于系统卡顿,导致没接收到post返回的数据

似水流年2015 发表于 2023-8-8 16:45

想办法学习一下抓包,用post或get协议来提交吧

01awzh 发表于 2023-8-8 17:20

似水流年2015 发表于 2023-8-8 16:45
想办法学习一下抓包,用post或get协议来提交吧

调入request库,用post接收返回的内容?

似水流年2015 发表于 2023-8-8 17:39

01awzh 发表于 2023-8-8 17:20
调入request库,用post接收返回的内容?

先抓包,看浏览器在填表提交时的post请求是怎么样的,然后用python的request库,伪造请求参数和需要填写的信息,post发起填表的请求。就可以了。。。。不用通过selenium操作浏览器来填,又慢效率又低,还出错

01awzh 发表于 2023-8-8 20:48

试了一下selenium-wire,折腾半天发现这个东西不支持IE浏览器(本来是想用selenium-wire监听post返回请求,当捕捉到目标时判断网页加载成功,继续下一步,否则持续监听)

现在程序已经能跑起来了,最大的问题还是因为不能准确判断出页面是否加载完毕,经常导致程序出错。
(不能准确判断页面是否加载完毕都是发生在弹出新页面的时候。

在不弹出新页面的时候,在同一页面下加载新内容的时候判断比较准确)

01awzh 发表于 2023-8-8 21:53

似水流年2015 发表于 2023-8-8 17:39
先抓包,看浏览器在填表提交时的post请求是怎么样的,然后用python的request库,伪造请求参数和需要填写 ...

直接向服务器post这个方法之前也想了,不过不知道是谁设计的,requset的内容太乱了,量大还乱,真是头大

如果用widow.onload呢?能不能行呢

现在基于win32+ie8的环境,用selenium+openpyxl已经把程序跑起来了。出现最大的问题就是没法准确判断页面加载完毕

这个问题最容易出现在弹出新页面的时候,如果不弹出新页面,只是在同一页面下加载新内容时判断比较准确

01awzh 发表于 2023-8-9 09:56

lx19960103 发表于 2023-8-9 08:58
同感,目前我的解决办法是用time.sleep,有时候确实不准,遇到特殊情况,就会死掉,我是直接捕获异常,然后 ...

没有啥更好的办法嘛,判断js的Window.onload呢,捕获异常之后重新试几次这种方法好用吗

lx19960103 发表于 2023-8-9 10:17

01awzh 发表于 2023-8-9 09:56
没有啥更好的办法嘛,判断js的Window.onload呢,捕获异常之后重新试几次这种方法好用吗

可以试试,我是有异常,然后重新执行一遍就可以找到了,关键在于服务器卡顿页面加载时间这个未知,所以多次尝试总没错。
页: [1] 2 3
查看完整版本: python如何准确判断网页加载完毕,如何应对系统卡顿?