• selenium自动化中元素的三大等待


    等待元素可见之后再去操作,如果你的操作,带来了页面的变化,那么接下来要操作新的元素,必须要等待新的元素可见之后再操作
    1、强制等待
    sleep(等待的秒数):等到了规定的时间才会进行其他操作

    from selenium import webdriver
    import time
    driver = webdriver.Chrome()
    driver.get("http://www.baidu.com")
    driver.find_element_by_xpath('//div[@id="u1"]//a[@name="tj_login"]').click()
    # 页面发生了变化
    time.sleep(3) # 强制等待
    driver.find_element_by_id("TANGRAM__PSP_10__footerULoginBtn").click()
    time.sleep(2) # 强制等待

    2、隐性等待
    driver.implicitly_wait(秒)   隐性等待、

    一次会话当中,在启动会话(webdrvier.Chromt())到结束会话(driver.quit())只需要调用一次

    只适用于场景:1、等待元素存在(DOM页面里面)、2、等待命令执行完成(),

    from selenium import webdriver
    
    driver = webdriver.Chrome()
    driver.implicitly_wait(30)  # 隐性等待时间
    driver.get("http://www.baidu.com")
    driver.find_element_by_xpath('//div[@id="u1"]//a[@name="tj_login"]').click()
    # 页面发生了变化
    # 隐性等待,全局设置一次隐形等待,那么整个会话(从打开浏览器到最后结束关闭浏览器)期间全部应用
    # 只适用于场景:1、等待元素存在(DOM页面里面)、2、等待命令执行完成(),
    # 元素本身存在的情况就不太好用(这个百度的就是本身存在)
    # 等待上限:30s 元素什么时候存在了,什么时候就不等了。如果超时了就会抛异常,TimeoutExceptid
    driver.find_element_by_xpath('//p[@id="TANGRAM__PSP_10__footerULoginBtn"]').click()
    
    driver.quit()

    3、显性等待

    智能等待,上限时间范围之内,等待 xxx 条件成立,就结束等待。

    1)时间上限、2)条件、3)等待(时间上限,轮询周期),每隔多久判断条件是否成立,成立就不等,未成立就等,超过时间上限就报错

    等待:WebdriverWait类  条件:expected_condition   各种场景比如元素可见,

    from selenium import webdriver
    
    from selenium.webdriver.support.wait import WebDriverWait
    from selenium.webdriver.support import expected_conditions as EC
    from selenium.webdriver.common.by import By
    
    driver = webdriver.Chrome()
    driver.get("http://www.baidu.com")
    driver.find_element_by_xpath('//div[@id="u1"]//a[@name="tj_login"]').click()
    # 页面的变化 - 弹出了登录框 默认轮询周期0.5秒
    # WebDriverWait(driver, 等待上限, 轮询周期).until(条件)
    loc = (By.XPATH, '//p[@id="TANGRAM__PSP_10__footerULoginBtn"]')
    WebDriverWait(driver, 30).until(EC.visibility_of_element_located(loc))
    # 元素可见:visibility_of_element_located
    # 元素们可见:visibility_of_elements_located
    
    # 点击
    driver.find_element(*loc).click()
    
    driver.quit()
  • 相关阅读:
    516. 最长回文子序列
    NC50493 环形石子合并
    NC16650 采药
    NC16664 合唱队形
    NC51170 石子合并
    148. 合并果子
    NC25138 子串查询
    二维数组对角线 的 规律
    如何讲一个网页转换为jpg?(图片!)
    Java两倍 犯错题
  • 原文地址:https://www.cnblogs.com/yongzhuang/p/12492813.html
Copyright © 2020-2023  润新知