Selenium + Python 添加等待时间函数
添加等待时间
有时候为了保证脚本运行的稳定性,例如JS填补数据等场景,需要脚本中添加等待时间。
1、添加休眠
添加休眠非常简单,我们需要引入 time 包,就可以在脚本中自由的添加休眠时间了。
# coding = utf-8 from selenium import webdriver import time # 调入 time 函数 browser = webdriver.Firefox() browser.get("http://mimvp.com") time.sleep(0.3) # 休眠0.3秒 browser.find_element_by_id("kw").send_keys("selenium") browser.find_element_by_id("su").click() time.sleep(3) # 休眠3秒 browser.quit()
2、智能等待
通过添加 implicitly_wait() 方法就可以方便的实现智能等待
implicitly_wait(30)
用法应该比 time.sleep(30) 更智能,后者time.sleep(30)只能选择一个固定的时间的等待,前者implicitly_wait(30)可以在一个时间范围内智能的等待。
文档解释:
selenium.webdriver.remote.webdriver.implicitly_wait(time_to_wait)
隐式地等待一个无素被发现或一个命令完成;这个方法每次会话只需要调用一次
time_to_wait() 等待时间
用法: browser.implicitly_wait(30)
# coding = utf-8 from selenium import webdriver import time # 调入 time 函数 browser = webdriver.Firefox() browser.get("http://www.baidu.com") browser.implicitly_wait(30) # 智能等待30秒 browser.find_element_by_id("kw").send_keys("selenium") browser.find_element_by_id("su").click() browser.quit()
3. 等待直到获取某个特定元素
等待一定时长(如10秒),直到获取某个特定元素(如 id="mimvp-blog" )
WebDriverWait(browser, 10).until(lambda x: x.find_element_by_id("mimvp-blog"))
代码示例:
#!/usr/bin/env python # -*- coding:utf-8 -*- # # mimvp.com # 2016.8.25 from selenium import webdriver from selenium.webdriver.support.wait import WebDriverWait from pyvirtualdisplay import Display def spider_url(self, url): content = '' browser = None display = None try: display = Display(visible=0, size=(800, 600)) display.start() browser = webdriver.Firefox() browser.set_page_load_timeout(600) browser.get(url) # 等待时长10秒,默认0.5秒询问一次 WebDriverWait(browser, 10).until(lambda x: x.find_element_by_id("endtime")) content = browser.page_source except: print("error_msg: webdriver") if browser: browser.quit() if display: display.stop()
参考推荐:
Python + Selenium2 + Chrome 爬取网页
版权所有: 本文系米扑博客原创、转载、摘录,或修订后发表,最后更新于 2018-01-09 00:44:20
侵权处理: 本个人博客,不盈利,若侵犯了您的作品权,请联系博主删除,莫恶意,索钱财,感谢!