添加等待时间

有时候为了保证脚本运行的稳定性,例如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()

 

 

参考推荐

Selenium2.0 Python 常用函数

Python + Selenium2 + Chrome 爬取网页

Python+Selenium2 搭建自动化测试环境

WebDriver配置Firefox代理服务器

Python爬虫抓站的一些技巧