宝安建网站的公司,抖音代运营套餐价格表,eyoucms官网,企业网站seo名称selenium 等待
为什么需要写等待呢#xff1f;
因为我们的元素定位 可能因为一些原因报错 原因#xff1a; 元素定位错误 动态元素 元素没有加载完成 打开新窗口/标签等 所以我们等待 就是解决第三个问题的
方式一 强制等待#xff08;time.sleep#xff09;#xff1a…selenium 等待
为什么需要写等待呢
因为我们的元素定位 可能因为一些原因报错 原因 元素定位错误 动态元素 元素没有加载完成 打开新窗口/标签等 所以我们等待 就是解决第三个问题的
方式一 强制等待time.sleep
暂停运行指定的时间。这种方式的优点是简单易用但缺点是可能会浪费无谓的等待时间另外如果等待时间设定不当可能会出现未等待到元素就进行下一步操作导致失败的情况。
time.sleep(10)方式二 隐式等待implicitly_wait
告知 WebDriver 在查找元素时如果立即未找到则等待一段时间直到元素出现为止。缺点是如果网页中有多个元素需要等待则每个元素都要进行等待可能会增加测试运行的时间。
implicitly_wait(time) 默认参数的单位为秒
driver.implicitly_wait(10)首先这10秒并非一个固定的等待时间它并不影响脚本的执行速度。其次它并不针对页面上的某一元素进行等待。当脚本执行到某个元素定位时如果元素可以定位则继续执行如果元素定位不到则它将以轮询的方式不断地判断元素是否被定位到。假设在第6秒定位到了元素则继续执行若直到超出设置时长10秒还没有定位到元素则抛出异常。
方式三 显式等待WebDriverWait Expected Conditions
这是一种更为智能的等待方式它可以部分解决强制等待和隐式等待的缺点。它允许我们指定要等待的条件和最大等待时间当条件满足时立即返回否则在达到最大等待时间时抛出异常。因此它不会浪费无谓的时间。虽然它比隐式等待和强制等待更为灵活但同样也更为复杂。
from selenium.webdriver.support import expected_conditions
WebDriverWait(driver, 10).until(expected_conditions.presence_of_element_located((By.ID, su))).click()
WebDriverWait(driver,timeout,poll_frequency0.5,ignored_exceptionsNone)
driver 浏览器驱动。 timeout 最长超时时间默认以秒为单位。 poll_frequency 检测的间隔步长时间默认为0.5S。 ignored_exceptions 超时后的异常信息默认情况下抛NoSuchElementException异常。
WebDriverWait()一般由until()或until_not()方法配合使用 until(method, message‘’) 当某元素出现或什么条件成立则继续执行。指定时间找到则返回值没有找到报错 until_not(method, message‘’) 当某元素消失或什么条件不成立则继续执行。指定时间内元素消失返回True,如果还在则报错
WebDriverWait使用
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
from selenium.webdriver.common.by import By# 启动 webdriver假设为 driver
driver webdriver.Firefox()# 访问页面
driver.get(http://somedomain/url_that_delays_loading)# 使用 WebDriverWait设置最大等待时间以及轮询时间默认 0.5 秒
wait WebDriverWait(driver, 10)# 使用 until 方法其中 expected_conditions 已经有很多内置的条件可以使用
element wait.until(EC.presence_of_element_located((By.ID, someid)))# 接下来就可以对获取到的 element 进行操作了WebDriverWait 和 Expected Conditions 是 Selenium WebDriver 中一种同步的方式也称为显式等待。它用于解决一些在页面完全加载完成之前不可交互的元素的问题。这种方式能够等待页面元素在一定时间秒内变为可交互状态如果超出了设置的时间还没有找到元素就会返回异常。
一些常用的 expected_conditions 条件如下 presence_of_element_located某个元素已经出现在 DOM 里注意这并不意味着该元素是可见的。 visibility_of_element_located元素可见最少一个像素可见。 element_to_be_clickable元素可以被点击通常用在确认按钮可以被点击后再执行点击事件。 注意如果到了最大等待时间条件还未满足WebDriverWait 将会抛出 TimeoutException异常可以根据需要进行捕获并处理。
总结
所以要选择哪种方式取决于你具体的需求和环境。推荐在可能的情况下尽量使用显式等待因为它提供了最大等待时间以及等待某一特定条件成立。同时显式等待也是动态的它会在条件满足后立即返回最大程度地减少了无谓的等待时间。