Python selenium页面加载慢超时的解决方案


Posted in Python onMarch 18, 2020

开发环境:

win10-64  python2.7.16  chrome77

from selenium import webdriver
driver = webdriver.Chrome(executable_path='chromedriver.exe')
driver.get('http://全部加载完成超级慢的网站')

user = 'abc'
pwd = '123

driver.find_element_by_id('email').send_keys(user)
driver.find_element_by_id('pass').send_keys(pwd)

先看这样一段代码

当执行了get以后,除非网站全部加载完成,否则你只能乖乖等,什么都不能干,这是整个程序是阻塞的,get不完就别想进行下面操作

这个等待可能是5分钟或者更久

其实5秒钟的时候界面就已经打开了,然后他还在加载些什么js,img,等待速度超慢的,但是网页人工是可以操作

那么有没有什么办法呢,网上找了一通,给出了很多解决方案

首先是这货(下面是我复制的):

from selenium import webdriver
driver=webdriver.Chrome()
driver.set_page_load_timeout(5)
driver.set_script_timeout(5)#这两种设置都进行才有效
try:
  d.get(s)
except:
  d.execute_script('window.stop()')#这句话好像没什么软用

可以在页面停止加载后继续操作了

driver.set_page_load_timeout(5)这玩意一设置,没问题,5秒后网页确实停止了,但是driver也死了,不管运行什么都是timeout,还说try一下,driver是死透了,只能重新来
不知道是selenium更新了还是他自己没测试还是chrome更新了,现在这么设置就是找死的

注意:使用set_page_load_timeout时候,当页面未加载出任何东西的时候(往往是html源码未加载),因为超时而停止,会导致driver失效,
后面的driver都不能操作,所以超时设置应该至少保证页面内容加载出来一部分,设置超时不宜过短,如下图在页面此种状态下停止加载后driver失效。

不错,是有人也说了,不能设置太短,会失效,但是我可以说,你设置5分钟照样失效,只要超时一次,driver就完蛋,直接翻车

接下来是另一个方法

# coding = utf-8
from selenium import webdriver
from selenium.webdriver.support.wait import WebDriverWait
import time

driver = webdriver.Chrome()
class button():
  def __call__(self, driver):
    if driver.find_element_by_id('js_love_url'):
      return True
    else:
      return False 

driver.implicitly_wait(60)
time_start = time.time()
driver.get('https://www.163.com/')

# driver.find_element_by_id('js_love_url').click()
WebDriverWait(driver,2,0.5).until(button()) 
time_end = time.time()
print('access time is : ', time_end - time_start)
time.sleep(2)
driver.quit()

用WebDriverWait进行操作,不过我测试下来,driver.get()不执行完,下面的代码根本就不会执行,所以还是不行

找了各种方法,各种操作,都失败了,总算今天找到了正确的方法

原理非常简单:driver.get()这个操作,改成不阻塞的就行了,这样打开网页就操作完成了,不需要等他加载

下面我可以直接等待需要的元素出现即可进行操作

配置也是很简单

from selenium import webdriver
from selenium.webdriver.common.desired_capabilities import DesiredCapabilities

#get直接返回,不再等待界面加载完成
desired_capabilities = DesiredCapabilities.CHROME
desired_capabilities["pageLoadStrategy"] = "none"

driver = webdriver.Chrome(executable_path='chromedriver.exe')

配置一个参数,就是页面加载策略,系统默认是等待,就是等他加载完,直接设置成none,就是不等待,这样就是get操作完后直接就是结束了

到此这篇关于Python selenium页面加载慢超时的解决方案的文章就介绍到这了,更多相关Python selenium加载慢内容请搜索三水点靠木以前的文章或继续浏览下面的相关文章希望大家以后多多支持三水点靠木!

Python 相关文章推荐
在Python中使用判断语句和循环的教程
Apr 25 Python
Python制作刷网页流量工具
Apr 23 Python
Python实现SSH远程登陆,并执行命令的方法(分享)
May 08 Python
TensorFlow实现Softmax回归模型
Mar 09 Python
使用Python快乐学数学Github万星神器Manim简介
Aug 07 Python
python+mysql实现个人论文管理系统
Oct 25 Python
python 通过视频url获取视频的宽高方式
Dec 10 Python
Django框架之中间件MiddleWare的实现
Dec 30 Python
python初步实现word2vec操作
Jun 09 Python
python 破解加密zip文件的密码
Apr 22 Python
Python中Matplotlib的点、线形状、颜色以及绘制散点图
Apr 07 Python
PyCharm 配置SSH和SFTP连接远程服务器
May 11 Python
Python Selenium 设置元素等待的三种方式
Mar 18 #Python
Python多线程threading join和守护线程setDeamon原理详解
Mar 18 #Python
Python semaphore evevt生产者消费者模型原理解析
Mar 18 #Python
Python中remove漏删和索引越界问题的解决
Mar 18 #Python
Python集成开发工具Pycharm的安装和使用详解
Mar 18 #Python
Python3监控windows,linux系统的CPU、硬盘、内存使用率和各个端口的开启情况详细代码实例
Mar 18 #Python
PyTorch加载自己的数据集实例详解
Mar 18 #Python
You might like
php更改目录及子目录下所有的文件后缀的代码
2010/09/24 PHP
ThinkPHP3.1新特性之多数据库操作更加完善
2014/06/19 PHP
CI操作cookie的方法分析(基于helper类库)
2016/03/28 PHP
浅析PHP开发规范
2018/02/05 PHP
PHP var关键字相关原理及使用实例解析
2020/07/11 PHP
深入浅析安装PhpStorm并激活的步骤详解
2020/09/17 PHP
jWiard 基于JQuery的强大的向导控件介绍
2011/10/28 Javascript
引用外部js乱码问题分析及解决方案
2013/04/12 Javascript
JS操作数据库的实例代码
2013/10/17 Javascript
jQuery遍历Table应用示例
2014/04/09 Javascript
Jquery 实现弹出层插件
2015/01/28 Javascript
JavaScript通过字符串调用函数的实现方法
2015/03/18 Javascript
JQuery+Ajax实现数据查询、排序和分页功能
2015/09/27 Javascript
Angular.JS通过指令操作DOM的方法
2017/05/10 Javascript
最全正则表达式总结:验证QQ号、手机号、Email、中文、邮编、身份证、IP地址等
2017/08/16 Javascript
详解一次Vue低版本安卓白屏问题的解决过程
2019/05/30 Javascript
使用jQuery实现购物车
2020/10/29 jQuery
[01:08:44]NB vs VP 2018国际邀请赛小组赛BO2 第一场 8.18
2018/08/19 DOTA
Python随机生成数模块random使用实例
2015/04/13 Python
Python 爬虫之超链接 url中含有中文出错及解决办法
2017/08/03 Python
Python实现繁体中文与简体中文相互转换的方法示例
2018/12/18 Python
python制作mysql数据迁移脚本
2019/01/01 Python
Python socket模块实现的udp通信功能示例
2019/04/10 Python
python创建学生成绩管理系统
2019/11/22 Python
Html5实现二维码扫描并解析
2016/01/20 HTML / CSS
澳大利亚家具和家居用品在线商店:Interiors Online
2018/03/05 全球购物
加拿大拼图大师:Puzzle Master
2020/12/28 全球购物
我想声明一个指针并为它分配一些空间, 但却不行。这些代码有什么 问题?char *p; *p = malloc(10);
2016/10/06 面试题
一些Solaris面试题
2013/03/22 面试题
《金色的脚印》教后反思
2014/04/23 职场文书
党委班子剖析材料
2014/08/21 职场文书
2015新学期校长寄语(3篇)
2015/03/25 职场文书
学校运动会感想
2015/08/10 职场文书
创业计划书之韩国烧烤店
2019/09/19 职场文书
Java8中Stream的一些神操作
2021/11/02 Java/Android
MySQL限制查询和数据排序介绍
2022/03/25 MySQL