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爬虫抓取暴走漫画上gif图片的实例分享
Apr 20 Python
Python学习笔记之if语句的使用示例
Oct 23 Python
一篇文章快速了解Python的GIL
Jan 12 Python
python微信跳一跳系列之色块轮廓定位棋盘
Feb 26 Python
Python OpenCV处理图像之图像像素点操作
Jul 10 Python
浅谈python下含中文字符串正则表达式的编码问题
Dec 07 Python
python 将有序数组转换为二叉树的方法
Mar 26 Python
python网络编程 使用UDP、TCP协议收发信息详解
Aug 29 Python
如何在python中实现随机选择
Nov 02 Python
python opencv人脸识别考勤系统的完整源码
Apr 26 Python
Python排序算法之插入排序及其优化方案详解
Jun 11 Python
68行Python代码实现带难度升级的贪吃蛇
Jan 18 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 中执行系统外部命令
2006/10/09 PHP
一些常用的php函数
2006/12/06 PHP
php minixml详解
2008/07/19 PHP
php数组函数序列之rsort() - 对数组的元素值进行降序排序
2011/11/02 PHP
PHP函数篇详解十进制、二进制、八进制和十六进制转换函数说明
2011/12/05 PHP
javascript 解析后的xml对象的读取方法细解
2009/07/25 Javascript
JS 自定义函数缺省值的设置方法
2010/05/05 Javascript
通过JS自动隐藏手机浏览器的地址栏实现原理与代码
2013/01/02 Javascript
jquery Mobile入门—外部链接切换示例代码
2013/01/08 Javascript
jQuery结合HTML5制作的爱心树表白动画
2015/02/01 Javascript
深入分析jsonp协议原理
2015/09/26 Javascript
jQuery的each循环用法简单示例
2016/06/12 Javascript
微信小程序 教程之wxapp 视图容器 view
2016/10/19 Javascript
JS两种类型的表单提交方法实例分析
2016/11/28 Javascript
基于javascript的Form表单验证
2016/12/29 Javascript
jQuery源码分析之sizzle选择器详解
2017/02/13 Javascript
javascript ES6 新增了let命令使用介绍
2017/07/07 Javascript
Vue-Access-Control 前端用户权限控制解决方案
2017/12/01 Javascript
Nodejs实现用户注册功能
2019/04/14 NodeJs
Javascript表单序列化原理及实现代码详解
2020/10/30 Javascript
[01:00:04]DOTA2上海特级锦标赛B组小组赛#1 Alliance VS Spirit第二局
2016/02/26 DOTA
在Python中操作字典之update()方法的使用
2015/05/22 Python
Django 生成登陆验证码代码分享
2017/12/12 Python
Django之编辑时根据条件跳转回原页面的方法
2019/08/21 Python
一行Python代码制作动态二维码的实现
2019/09/09 Python
python小项目之五子棋游戏
2019/12/26 Python
一款简洁的纯css3代码实现的动画导航
2014/10/31 HTML / CSS
用html5绘制折线图的实例代码
2016/03/25 HTML / CSS
澳大利亚玩具剧场:Toy Playhouse
2019/03/03 全球购物
YSL圣罗兰美妆英国官网:Yves Saint Laurent Beauty UK
2019/08/03 全球购物
怎样创建、运行java程序
2014/08/01 面试题
酒店前厅员工辞职信
2014/01/08 职场文书
一月红领巾广播稿
2014/02/11 职场文书
小学优秀学生评语
2014/12/29 职场文书
三年级上册科学教学计划
2015/01/21 职场文书
酒店销售经理岗位职责
2015/04/02 职场文书