• Selenium-Webdriver API命令和操作-Get & Wait


    抓取页面

    WebDriver可能要做的第一件事就是导航到一个页面。正常的做法是调用“get”:

    drviver.get("http://www.google.com")

    取决于几个因素,包括操作系统/浏览器组合,WebDriver可能会或可能不会等待页面加载。在某些情况下,WebDriver可能会在页面完成之前或者甚至开始加载之前返回控件。为确保健壮性,需要使用显式和隐式等待来等待页面中存在的元素 

    显式等待

    明确的等待是定义的代码,等待一定的条件发生,然后继续进行代码。最糟糕的情况是Thread.sleep(),它将条件设置为等待的确切时间段。有一些方便的方法可以编写只需要等待的代码。WebDriverWait与ExpectedCondition结合是可以完成的一种方法。

    from selenium import webdriver
    from selenium.webdriver.common.by import By
    from selenium.webdriver.support.ui import WebDriverWait 
    from selenium.webdriver.support import expected_conditions as EC 
    
    ff = webdriver.Firefox()
    ff.get("http://somedomain/url_that_delays_loading")
    try:
        element = WebDriverWait(ff, 10).until(EC.presence_of_element_located((By.ID, "myDynamicElement")))
    finally:
        ff.quit()

    在等待10秒之前抛出一个TimeoutException,或者如果它发现元素将在0-10秒内返回。WebDriverWait默认每500毫秒调用ExpectedCondition,直到成功返回。ExpectedCondition函数类型的成功返回值是布尔值true或非空对象。这个例子在功能上也等同于下一个Implicit Waits例子:

    from selenium import webdriver
    
    ff = webdriver.Firefox()
    ff.implicitly_wait(10) # seconds
    ff.get("http://somedomain/url_that_delays_loading")
    myDynamicElement = ff.find_element_by_id("myDynamicElement")

    自动化浏览器时,经常遇到一些常见的情况。下面列出的是使用这些条件的几个例子。Python绑定包括convenience方法,因此不必亲自编写ExpectedCondition类或为其创建自己的实用程序包。

    from selenium.webdriver.support import expected_conditions as EC
    wait = WebDriverWait(driver, 10)
    element = wait.until(EC.element_to_be_clickable((By.ID,'someid')))

    ExpectedConditions包包含一组与WebDriverWait一起使用的预定义条件。

    隐等待

    一个隐含的等待就是告诉WebDriver在查找一个或多个元素(如果不是立即可用的)时轮询DOM一段时间。默认设置为0.一旦设置,隐式等待就设置为WebDriver对象实例的生命周期。

    from selenium import webdriver
    
    ff = webdriver.Firefox()
    ff.implicitly_wait(10) # seconds
    ff.get("http://somedomain/url_that_delays_loading")
    myDynamicElement = ff.find_element_by_id("myDynamicElement")
  • 相关阅读:
    第二阶段团队项目冲刺第三天
    第二阶段团队项目冲刺第二天
    第二阶段团队项目冲刺第一天
    第二次冲刺站立会议05
    第二次冲刺站立会议04
    第二次冲刺站立会议03
    第二次冲刺站立会议02
    第二次冲刺站立会议01
    第二次冲刺计划会议
    cnblogs.com的用户体验
  • 原文地址:https://www.cnblogs.com/weiweim/p/8445193.html
Copyright © 2020-2023  润新知