selenium 的 webdriver 对象有一个 get 方法,可以打开指定的 URL,但是它是阻塞的,除非整个网页都加载完,否则不会返回。这样有两个弊端:一、很多时候,我们不需要整个网页都加载出来。二、如果网页因某种原因卡住,我们的程序也会卡住。解决这个问题的方法,就是用 set_page_load_timeout 函数和 WebDriverWait。
set_page_load_timeout(t):设置 get 方法的最大执行时间为 t 秒。
class WebDriverWait(object):
def __init__(self, driver, timeout, poll_frequency=POLL_FREQUENCY, ignored_exceptions=None)
timeout:等待的最大时间(单位:秒)
poll_frequency:检查的时间间隔(默认 0.5 秒)
ignored_exceptions:执行检查函数时要无视的异常
def until(self, method, message='')
method:检查函数。必须只有一个参数,接受初始化时传入的 driver。只有当该函数返回 True 或者超时,程序才会继续
message:若超时抛出的异常信息
from selenium import webdriver
from selenium.webdriver.support.wait import WebDriverWait
from selenium.common.exceptions import TimeoutException
driver = webdriver.Firefox()
driver.set_page_load_timeout(0.01)
driver.get('https://www.baidu.com/')
except TimeoutException:
print('timeout')
WebDriverWait(driver, 10, 0.1).until(lambda x: x.find_element_by_id('kw'))
print('the page is loaded')
我们把网页加载的最大时间设置为 0.01s,这样,get 方法立刻就会抛出 TimeoutException,我们不管它,然后用 WebDriverWait 判断网页有没有加载完毕。
问题解决!
selenium 的 webdriver 对象有一个 get 方法,可以打开指定的 URL,但是它是阻塞的,除非整个网页都加载完,否则不会返回。这样有两个弊端:一、很多时候,我们不需要整个网页都加载出来。二、如果网页因某种原因卡住,我们的程序也会卡住。解决这个问题的方法,就是用 set_page_load_timeout 函数和 WebDriverWait。set_page_load_time...
在执行自动化测试用例过程中,发现因为网络慢或其他原因导致driver.get(url) 时,页面一直在
加载
,页面没有
加载
完成就不会去继续执行下面的动作,但是实际上需要操作的元素已经
加载
出来了。
解决
方法
第一步:使用 set_script_timeout() 设置等待最大时间。
第二步:到了最大等待时间后页面如果仍然没有
加载
完成,执行js代码, driver.execute_script("...
driver.get(”url”)等到页面全部
加载
渲染完成后才会执行后续的脚本。
在执行脚本时,driver.get(“url”) ,如果当前的url页面内容较多
加载
特别慢,很费时间,但是我们需要操作的元素已经
加载
出来,可以将页面
加载
停掉,不影响后面的脚本执行,
解决
办法
设置页面
加载
timeout,get操作: try get except 脚本window.stop(), 使用GeckoDriver上有效果,
但是在ChromeDriver上还是会有
问题
,抛出异常timeout后续脚本不会继续执行
GeckoDriver执行具体如下:
访问百度贴吧某个获取其帖子总页数:
可以通过两种方式获取
在进行爬虫等数据采集任务,将爬取的页面保存成mhtml也面的时候,往往会遇到一些页面,存在懒
加载
的
问题
,这样就算将
网页
保存下来,里面的图片等都会丢失。这里介绍使用自动化测试工具
解决
懒
加载
的
问题
。
首先,懒
加载
是什么?其实网上有很多的专业介绍,这里我就用一句话概括,为了减轻服务器的压力,用户访问页面的时候,不会全部将页面
加载
,而是当用户浏览到哪,
加载
到哪。这样的结果就是当你保存页面的时候,有些数据是拿不到的,因为你没浏览到某个地方,这个地方的数据是无法
加载
的。
解决
思路:...
Selenium
webdriver未正确关闭资源导致爬虫
卡住
由于我在写
selenium
爬虫代码时,关闭页面使用的driver.close()
查过资料 得知driver.close()指的是仅关闭页面 ,因此这里应该使用driver.quit() 这个方法不但会关闭所有页面,还会释放webdriver资源
批量登录设备执行操作时(150台设备),每次一到第22台设备时,页面
加载
不出来,直接报错。
经过各种网上看教程,还是没
解决
。
尝试每次循环一次,结束Chromedriver. exe和Chrome.exe,还是会卡主。
手动把卡主的画面最大化后发现,页面正常,突然有思路了。
在程序中,卡顿页面之前加一个最大化窗口指令:
2 from
selenium
import webdriver
4 p = __import__('
selenium
.webdriver.firefox.webdriver',fromlist=('WebDriver')) #####
5 url = ...