Selenium 页面加载慢

Selenium 页面加载慢

问题描述:

使用Selenium获取网页,发现webdriver.get方法会阻塞直到网页全部加载完成,官方提供的三种wait方法仅对网页的ajax有比较明显的效果。对于部分网页,网页中所需要的元素很快就能加载完成,但是整个页面加载完成却需要很久,所以如何才能使得网页在加载完所需要元素后即停止。

问题解决:

pageLoadStrategy设置(推荐)

For commands that cause a new document to load, the point at which the command returns is determined by the session’s page loading strategy.

上面这段话的大致意思是,对于一个新加载的dom,页面什么时候开始接受命令由页面的加载策略决定,也就是说,我们通过修改页面加载策略,可以使页面即使处于加载中,也能接受我们的命令,从这点可以解决webdriver.get的阻塞问题。而每类webdriver都有一个对应的配置文件放在特定的类DesiredCapabilities里面,通过修改里面的pageLoadStrategy,可以使webdriver的页面加载策略发生改变。

from selenium import webdriver

from selenium.webdriver.common.desired_capabilities import DesiredCapabilities

from selenium.webdriver.support.ui import WebDriverWait

desired_capabilities = DesiredCapabilities.CHROME  # 修改页面加载策略

desired_capabilities["pageLoadStrategy"] = "none"  # 注释这两行会导致最后输出结果的延迟,即等待页面加载完成再输出

driver = webdriver.Chrome(‘browsers/chromedriver.exe‘)

wait = WebDriverWait(driver, 10)  #后面可以使用wait对特定元素进行等待

driver.get(‘http://qzone.qq.com/‘)

# some code to work.

print("Reach end.")

上面我们可以看到,将页面加载策略修改为none之后,页面即使在加载过程中,程序也可以继续执行。代码中的pageLoadStrategy属性可以设置为以下三种属性:

normal

即正常情况下,selenium会等待整个界面加载完成(指对html和子资源的下载与解析,不包括ajax)

eager

要等待整个dom树加载完成,即DOMContentLoaded这个事件完成,仅对html的内容进行下载解析

none

当html下载完成之后,不等待解析完成,selenium会直接返回

上面的代码用了最后一种解析方式——none,不作等待,直接返回,然后在后面的代码中可以用explicit_wait或者implicit_wait等方式来对特定元素进行等待捕获。

总结

  1. 不建议使用eager模式,会导致browser没有生成,返回异常;
  2. 使用none模式相当于生成了dom,但不加载其它文件(图片等)。

问题:

DOMContentLoaded事件

http://www.softwhy.com/article-9783-1.html

原文地址:https://www.cnblogs.com/wodeboke-y/p/11215412.html

时间: 2024-07-31 14:15:38

Selenium 页面加载慢的相关文章

[转载]Python & Selenium -- 页面加载时间过长&启动指定FF

原文链接:https://my.oschina.net/u/2344787/blog/400507?p={{page}} 1. selenium webdriver在get方法会一直等待页面加载完毕才会执行后面的,可如果加载时间太长会导致后续操作无法进行. 例如:get 汽车之家页面时会等待很长时间,其实页面基本元素都已加载,可进行后续操作 可以通过set_page_load_time()方法来设定时间, 然后捕获timeout异常 并 通过执行Javascript来停止页面加载 window.

java selenium (十三) 智能等待页面加载完成

我们经常会碰到用selenium操作页面上某个元素的时候, 需要等待页面加载完成后, 才能操作.  否则页面上的元素不存在,会抛出异常. 或者碰到AJAX异步加载,我们需要等待元素加载完成后, 才能操作 selenium 中提供了非常简单,智能的方法,来判断元素是否存在. 阅读目录 实例要求 实例:set_timeout.html 下面的html 代码,  点击click 按钮5秒后, 页面上会出现一个红色的div快, 我们需要写一段自动化脚本智能的去判断这个div是否存在, 然后把这个div

Java Selenium (十二) 操作弹出窗口 & 智能等待页面加载完成 & 处理 Iframe 中的元素

一.操作弹出窗口   原理 在代码里, 通过 Set<String> allWindowsId = driver.getWindowHandles(); 来获取到所有弹出浏览器的句柄, 然后遍历, 使用swithcto.window(newwindow_handle)方法. 就可以定位到新的窗口. 测试页面的HTML <html> <head> <title>常见web ui元素操作, 及API使用</title> <script type

Python & Selenium -- 处理页面加载时间过长的问题

selenium webdriver在get方法会一直等待页面加载完毕才会执行后面的,可如果加载时间太长会导致后续操作无法进行. 例如:get 汽车之家页面时会等待很长时间,其实页面基本元素都已加载,可进行后续操作 可以通过set_page_load_time()方法来设定时间, 然后捕获timeout异常 并 通过执行Javascript来停止页面加载 window.stop() from selenium.common.exceptions import TimeoutException s

关于selenium的智能等待页面加载的问题

我们经常会碰到用selenium操作页面上某个元素的时候,需要等待页面加载完成后,才能操作, 否则页面上的元素不存在,会抛出异常. 或者碰到AJAX异步加载,我们需要等待元素加载完成后,才能操作. 首先来讲,我们最不推荐的就是使用  Thread.sleep( ) ;  这个也叫做线程休眠. 这种写法通常是固定了一个时间,然而我们不知道页面具体的等待情况,有快有慢,虽然很百搭,但是并不适用于框架中. selenium 中提供了非常简单,智能的方法,来判断元素是否存在.我来简单的举例说明几种(在我

webdriver定位页面元素时使用set_page_load_time()和JavaScript停止页面加载

原文:https://my.oschina.net/u/2344787/blog/400507?p={{page}} 引言: 在使用webdriver的get方法打开页面时,可能页面需要加载的元素较多导致加载时间很长,而时间过长会导致后面的操作无法进行,甚至直接报错:所以在页面加载到一定时间,实际需要定位的元素很大可能上已经加载出来时,需要停止页面的加载,进而进行下面的操作: 例如:get 汽车之家页面时会等待很长时间,其实页面基本元素都已加载,可进行后续操作 可以通过set_page_load

Jquery页面加载效果

1.说明 Jquery页面加载可实现异步请求时提示"请稍后,正在加载..."效果,同步请求不可用(即ajax async: false).本文地址:http://www.cnblogs.com/lengzhan/p/6423312.html 2.代码 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43

JS 页面加载触发事件 document.ready和window.onload的区别

document.ready和onload的区别——JavaScript文档加载完成事件页面加载完成有两种事件: 一是ready,表示文档结构已经加载完成(不包含图片等非文字媒体文件): 二是onload,指示页面包含图片等文件在内的所有元素都加载完成. 1.Dom Ready 使用jq时一般都是这么开始写脚本的: $(function(){ // do something }); 例如: $(function() { $("a").click(function() { alert(&

页面加载后累加,自加1&amp;&amp;判断数字是否为两位数

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns="http://www.w3.org/1999/xhtml"> <head> <meta http-equiv="Content-