selenium定位元素之By.className()和By.cssSelector()

本文详细介绍了在Selenium中如何利用By.className和By.cssSelector进行网页元素定位。当元素的class属性值单一时,可使用By.className;而面对拥有多个class属性值的元素,则需借助By.cssSelector。文中还提到了cssSelector的多种用法,包括匹配子串、内文字匹配以及结合多个属性进行定位。

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



元素的class属性值只有一个的时候可以使用className,<input id="kw" class="s_ipt" autocomplete="off" maxlength="255" value="" name="word">

driver.findElement(By.className("s_ipt")).sendKeys("Hello, world");

如果元素指定了若干个class属性值的“复合样式”的情况就使用cssSelector,如<input id="su" class="bg s_btn" type="submit" value="百度一下">

driver.findElement(By.classSelector("input.bg.s_btn")).sendKeys("Hello, world");


input.bg.s_btn 也可写成 input[class='bg s_btn']


xpath和css对应写法

Direct child     //div /a  ----------  div > a

Child    //div //a  ----------  div a


Match sub string

css=input[id^='aaa']      ----------  input element id start with aaa

css=input[id*='aaa']     ----------  input element id contains aaa

css=input[id$='aaa']     ----------  input element id end with aaa


Match innner text

css=input:contains('aaa')     ---------- input element inner text contains aaa

css=input:not(contains('aaa'))     ----------  input element which inner text not contains aaa


Use several attribute to describe

input[class='aa'] [type='button']

### 使用 CSS Selector 在 PyCharm 中定位元素 在 PyCharm 软件中使用 CSS 选择器来定位网页上的元素主要依赖于 Selenium 库的功能。Selenium 提供了多种方式来定位页面中的 HTML 元素,其中一种就是通过 `css_selector` 方法。 对于具体实现,在导入必要的模块之后,可以创建 WebDriver 实例并调用相应的函数来进行元素定位: ```python from selenium import webdriver import time driver = webdriver.Chrome() driver.get('目标网站URL') element = driver.find_element_by_css_selector('.example-class') # 单个元素定位[^1] elements = driver.find_elements_by_css_selector('.example-class') # 多个元素定位 for ele in elements: print(ele.text) time.sleep(3) driver.quit() ``` 当面对复杂的选择条件时,可以通过组合不同的属性伪类进一步精确化选择范围。例如,如果想要匹配具有特定 class 的 div 标签,则可编写如下形式的选择表达式 `.specific-div.class-name` 或者更复杂的 `[attribute=value].className:nth-child(n)` 等语法结构[^4]。 为了提高代码稳定性,建议加入隐式等待机制以应对网络延迟等问题引起的目标对象尚未加载完毕的情况: ```python edge = webdriver.Chrome() edge.implicitly_wait(5) # 设置最大等待时间为5秒,可根据实际情况调整[^5] ``` 这样可以在一定程度上减少由于页面未完全渲染而导致找不到指定元素的风险。 #### 注意事项 - 当前版本的 Selenium 已经不再推荐使用带有 `_by_` 前缀的方法(如 `find_element_by_css_selector()`),而是提倡采用新的 API 接口 `find_element(By.CSS_SELECTOR, '...')` `find_elements(By.CSS_SELECTOR, '...')` 来替代旧的方式。 - 如果遇到难以直接获取到合适的选择器路径的情形下,还可以考虑借助开发者工具里的 “复制选择器” 功能快速获得可用的选择字符串[^3]。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值