Python selenium页面加载慢超时的解决方案
作者:darkspr 发布时间:2022-10-15 04:37:43
开发环境:
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操作完后直接就是结束了
来源:https://www.cnblogs.com/darkspr/p/11533119.html
猜你喜欢
- 有时候我们用的一些pdf资料是没有目录的,这样找寻我们想到的东西比较麻烦。本篇文章就为大家带来python来生成pdf目录书签的方法。首先,
- 今天在 经纬 同学blog看到的。有这么一段代码:<ul id="demo"><li>
- <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN&
- 本人已经在运维行业工作了将近十年,我最早接触Linux是在大二的样子,那时候只追求易懂,所以就选择了Ubuntu作为学习、使用的对象,它简单
- 代码如下:USE [tempdb] GO /****** Object: UserDefinedFunction [dbo].[fun_ge
- 1. 前言数组和矩阵是数值计算的基础元素。目前为止,我们都是使用NumPy的ndarray数据结构来表示数组,这是一种同构的容器,用于存储数
- 本文实例讲述了Python3.5 Pandas模块之Series用法。分享给大家供大家参考,具体如下:1、Pandas模块引入与基本数据结构
- 是时候了—— 在大部分情况下当用户输入密码时把它们用清晰的文字显示出来。一直以来,提供反馈、把系统状态形象化是最基本的可用性原则,当用户输入
- 概述:本控件使用 html+css+javascript模拟HTML内置的select元素,实现其部分方法与属性,也增加了一部分功能,并且从
- 一、背景有一段代码,因为调用了封装的方法,所以会有一些本来不需要的返回值。这些返回值该怎么处理才能让它消失呢。有的人会说,清除变量不就好了吗
- 1.文件写入#打开文件,路径不对会报错f = open(r"C:\Users\jm\Desktop\pyfile.txt"
- PIL vs PillowPIL: Python Imaging Library,是python的图像处理库。由于PIL不兼容setupto
- 主要是运用java.util.regex类。 import java.util.regex.Matcher;import java
- 在一些网站上,特别是小说网站经常我们会看到这个功能,就是自动滚动屏幕的功能,方便了大家阅读文章,增强了用户体验。下面的javascript代
- PHP crc32() 函数实例输出 crc32() 的结果:<?php $str = crc32("Hello World
- 有些时候我们需要从视频序列中均匀的随机采样,我们可以每隔x步进行一次采样,这就要求对一个list每隔x步进行一次截取,再从截取到的不同的子集
- 北京时间2月15日据国外媒体报道,美国知名sns网站Facebook全球活跃用户量已突破1.75亿大关。数据显示,全球20%的网民都使用Fa
- UNIX时间戳转换为日期用函数FROM_UNIXTIME()select FROM_UNIXTIME(1156219870);日期
- 看看下面这个刚才提到的下拉列表的例子,就是将Application Object作为一个变量用来存储下拉列表的菜单项的:<%=&nbs
- <%dim total(7,1) total(1,0)="中国经营报"