python-selenium元素等待方式

本文探讨了三种网页元素加载等待策略:强制等待、隐式等待和显示等待。强制等待虽然简单但效率低下,可能导致不必要的延迟;隐式等待适用于整个页面,但在特定元素上可能不够灵活;显示等待则针对单个元素,确保更精确的等待时间。通过合理选择等待策略,可以优化自动化测试的效率。
部署运行你感兴趣的模型镜像

使用场景:当程序选择的元素需要等待程序处理完才能出现的情况,则需要开始懒加载模式,

采用等待模式,等待元素加载完成再执行

1、强制等待-固定等待时间,无论你出不出现

缺点:在元素只要1s加载完成,仍然等待10s,浪费时间,需要在元素前面添加,不灵活

time.sleep(10) #强制等待10s

2、隐式等待

优点:只需要声明一次,全页面元素都覆盖使用

在指定时间内没有加载出来,会爆出异常,加载出来,不用等待这么久

缺点:不灵活,等待所有元素

#隐式等待
 driver.implicitly_wait(3)
 driver.find_element(By.PARTIAL_LINK_TEXT, '孙小果').click()

3、显示等待

优点:每个元素都需要声明,等待指定的元素

在指定时间内没有加载出来,会爆出异常,加载出来,不用等待这么久

#显示等待
selenium.webdriver.support.wait.WebDriverWait(driver, 3).until(
    lambda _: driver.find_element(By.PARTIAL_LINK_TEXT, '孙小果')
).click()

您可能感兴趣的与本文相关的镜像

TensorFlow-v2.9

TensorFlow-v2.9

TensorFlow

TensorFlow 是由Google Brain 团队开发的开源机器学习框架,广泛应用于深度学习研究和生产环境。 它提供了一个灵活的平台,用于构建和训练各种机器学习模型

### Python Selenium 解决元素不可点击问题 当遇到 `ElementNotVisibleException` 错误时,这通常意味着虽然找到了目标元素,但它当前处于不可见状态或被其他元素遮挡。为了处理这种情况,有几种策略可以尝试。 #### 使用 JavaScript 执行器强制点击 如果常规的 `.click()` 方法不起作用,则可以通过执行 JavaScript 来模拟点击操作: ```python element = driver.find_element_by_css_selector("your css selector here") driver.execute_script("arguments[0].click();", element) ``` 这种方法绕过了标准交互流程,直接触发 DOM 事件[^1]。 #### 确认元素可见性和可点击性 确保所选中的元素确实已经加载完成并变得可见。有时页面上的某些部分可能还没有完全渲染完毕就进行了查找和点击动作。此时应该加入显式等待条件直到满足特定属性为止: ```python from selenium.webdriver.support.ui import WebDriverWait from selenium.webdriver.support import expected_conditions as EC from selenium.webdriver.common.by import By wait = WebDriverWait(driver, 10) visible_and_clickable_elem = wait.until( EC.element_to_be_clickable((By.CSS_SELECTOR, "your css selector")) ) visible_and_clickable_elem.click() ``` 这段代码会一直等到指定的选择器对应的元素既可见又可点击之后再继续执行下一步操作[^2]。 #### 处理 iframe 或者复杂布局下的元素访问 对于嵌套在 `<iframe>` 中或者其他特殊结构里的组件来说,需要先切换上下文才能正常与其互动。比如,在处理表单或其他类型的内联框架内的控件之前,应当调用 `switch_to.frame()` 函数来改变焦点位置: ```python # 切换至名为 'myFrame' 的 frame/iframe 内部 driver.switch_to.frame('myFrame') # 进行必要的操作... # 返回默认内容区域 (即整个网页主体) driver.switch_to.default_content() ``` 另外也要注意检查是否存在多个相同 ID 或类名的情况,因为这样可能会导致意外匹配到错误的对象实例[^3]。 #### 调整窗口大小适应显示全部元素 有时候由于屏幕分辨率不够大等原因造成部分内容未能充分展现出来而难以触及。这时调整浏览器尺寸有助于解决问题: ```python driver.set_window_size(width=1920, height=1080) # 设置固定宽高值 # 或者最大化窗口以充分利用可用空间 driver.maximize_window() ``` 通过上述手段往往能够有效改善大多数情况下发生的 “找不到” 或者 “点不到”的状况[^4]。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值