Python的web自动化学习(四)Selenium的显性等待(元素定位)

本文详细介绍了Selenium中常用的元素定位方法,包括ID、NAME、CLASS_NAME、TAG_NAME等基础定位,以及XPath、CSS_Selector等高级定位技术,并展示了实际操作中的使用示例。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

引言:

Selenium的显性等待,其常用的定位方法介绍,后面持续更细具体用法

示例如下:

<input type="text" class="s_ipt" name="wd" id="kw" maxlength="100" autocomplete="off">

ID定位

wait.until(EC.visibility_of_element_located((By.ID, 'kw')))

Name定位:

wait.until(EC.visibility_of_element_located((By.NAME, 'wd')))

Class定位:

wait.until(EC.visibility_of_element_located((By.CLASS_NAME, 's_ipt')))

Tag定位:

wait.until(EC.visibility_of_element_located((By.TAG_NAME, 'element_tag')))

Link Text定位:

wait.until(EC.visibility_of_element_located((By.LINK_TEXT, 'link_text')))

Partial Link Text定位: Link Text包含定位:

wait.until(EC.visibility_of_element_located((By.PARTIAL_LINK_TEXT, 'partial_link_text')))

CSS Selector定位:

wait.until(EC.visibility_of_element_located((By.CSS_SELECTOR, 'css_selector')))

XPath定位:

wait.until(EC.visibility_of_element_located((By.XPATH, 'xpath')))

层级定位:

parent_element = driver.find_element(By.XPATH, 'parent_xpath')
wait.until(EC.visibility_of_element_located((By.XPATH, 'child_xpath')), parent_element)

多个条件组合定位:

wait.until(EC.visibility_of_element_located((By.XPATH, 'xpath')) and EC.element_to_be_clickable((By.ID, 'element_id')))

标签属性定位:

wait.until(EC.visibility_of_element_located((By.XPATH, '//tag[@attribute="value"]')))

元素文本定位:

wait.until(EC.visibility_of_element_located((By.XPATH, '//*[text()="element_text"]')))

元素属性值包含定位:

wait.until(EC.visibility_of_element_located((By.CSS_SELECTOR, '[attribute*="value"]')))

元素属性值以定位:

wait.until(EC.visibility_of_element_located((By.CSS_SELECTOR, '[attribute^="value"]')))

元素属性值结尾定位:

wait.until(EC.visibility_of_element_located((By.CSS_SELECTOR, '[attribute$="value"]')))

元素文本包含定位:

wait.until(EC.visibility_of_element_located((By.XPATH, '//*[contains(text(), "element_text")]')))

属性值正则匹配定位:

wait.until(EC.visibility_of_element_located((By.XPATH, '//*[matches(@attribute, "regex_pattern")]')))

子元素定位:

parent_element = driver.find_element(By.XPATH, 'parent_xpath')
wait.until(EC.visibility_of_element_located((By.XPATH, 'child_xpath')), parent_element)

元素索引定位:

wait.until(EC.visibility_of_element_located((By.XPATH, '(//tag)[index]')))

兄弟元素定位:

wait.until(EC.visibility_of_element_located((By.XPATH, 'preceding-sibling::tag')))

父元素定位:

wait.until(EC.visibility_of_element_located((By.XPATH, 'parent::tag')))

祖先元素定位:

wait.until(EC.visibility_of_element_located((By.XPATH, 'ancestor::tag')))

子元素索引定位:

wait.until(EC.visibility_of_element_located((By.XPATH, 'parent_xpath/tag[index]')))

元素属性值不等于定位:

wait.until(EC.visibility_of_element_located((By.CSS_SELECTOR, '[attribute!="value"]')))

元素属性值包含多个定位:

wait.until(EC.visibility_of_element_located((By.CSS_SELECTOR, '[attribute~="value1"][attribute~="value2"]')))

元素属性值开始定位:

wait.until(EC.visibility_of_element_located((By.CSS_SELECTOR, '[attribute^="value"]')))

以上是常用selenium的基本定位的方法,后面持续更新具体结合实际操作用法

### Python 网页自动化学习路径和技术路线 #### 基础准备阶段 在开始学习网页自动化之前,需要具备一定的 Python 编程基础知识。这包括但不限于变量、数据结构、函数定义以及异常处理等内容[^1]。对于初学者而言,可以通过官方文档或者在线课程来快速掌握这些基本概念。 #### Selenium 的核心知识点 Selenium 是目前最流行的用于 Web 应用程序功能测试的开源工具之一,在实现浏览器操作方面非常强大。以下是几个重要的学习方向: - **环境搭建**: 安装 selenium 库及其依赖项 (如 GeckoDriver 或 ChromeDriver),并配置运行环境。 - **页面元素定位**: 掌握通过 ID, Name, XPath, CSS Selector 等方式准确定位 HTML 页面中的各个组件[^4]。 - **模拟用户行为**: 如点击按钮、填写表单字段、滚动条控制等功能都可以借助此库完成。 - **等待机制**: 显性和隐性两种类型的等待策略可以帮助解决动态加载内容带来的挑战。 - **框架设计模式**: Page Object Model(POM)是一种推荐的设计理念,它有助于提高代码重用率和维护效率。 #### 扩展技能——高级特性探索 除了熟悉以上提到的基础外,还可以进一步深入研究以下几个领域以增强实战能力: - **多线程/并发执行**: 当面对大量独立的任务时考虑采用异步或多进程方案提升性能表现。 - **截图与录像功能**: 记录下每次测试过程便于后续排查错误原因。 - **报告生成器集成**: 结合 Allure Report 或 ExtentReports 创建美观详尽的结果展示界面。 - **持续集成(CI)**: 将自动化脚本融入 Jenkins/GitLab CI Pipeline 中从而达到更快反馈的目的。 #### 实践建议 理论联系实际非常重要,因此鼓励大家选取真实的业务场景作为练习素材。比如可以尝试构建一个简单的电商网站登录注册流程验证案例集,逐步增加复杂度直至覆盖整个购物流程。 ```python from selenium import webdriver from selenium.webdriver.common.by import By import time driver = webdriver.Chrome() try: driver.get('https://example.com') username_field = driver.find_element(By.ID,'username') # 使用ID查找输入框 password_field = driver.find_element(By.NAME,'password') # 利用name属性获取密码域对象 submit_button = driver.find_elements(By.TAG_NAME,"button")[0]; # 获取第一个<button>标签实例 username_field.send_keys("testUser") password_field.send_keys("securePassword!") submit_button.click() finally: time.sleep(5) driver.quit() ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

经历一个春

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值