Selenium Webdriver如何通过class name定位元素并提取对应文本内容
问题原因
- 第一种写法类名匹配错误:元素实际类名为
sc-1b6bgon-7,你传入的sc-1b6bgon是不完整的前缀,无法匹配到对应元素 - 第二种写法违反方法规则:
find_element_by_class_name仅支持传入单个类名,不能传入空格分隔的多个类名 - 输出逻辑错误:即使成功定位到元素,直接打印元素对象只会输出元素的实例标识,无法打印元素内的文本内容,需要获取元素的
.text属性才能拿到目标文本
可行解决方案
如果使用的是Selenium 4及以上版本,建议优先使用By类的定位写法,旧版find_element_by_*方法已被官方弃用,使用前需要先导入对应模块:from selenium.webdriver.common.by import By
方法1:单个类名定位(最简单)
选择元素两个类中的任意一个传入即可,代码如下:
# 选择第一个类名定位 name_element = driver.find_element(By.CLASS_NAME, 'sc-1b6bgon-7') # 也可以选择第二个类名:driver.find_element(By.CLASS_NAME, 'cGUerq') print(name_element.text)
方法2:多类名同时匹配(精度更高)
如果担心单个类名和页面其他元素重复,可以用CSS选择器同时匹配两个类名,代码如下:
name_element = driver.find_element(By.CSS_SELECTOR, '.sc-1b6bgon-7.cGUerq') print(name_element.text)
方法3:属性匹配(复用性最强)
可以通过href、title等元素属性定位,后续要获取其他名称时只需要调整属性匹配规则即可,无需修改定位逻辑,代码示例:
# 按title属性匹配 name_element = driver.find_element(By.CSS_SELECTOR, 'a[title="Eden Ivy"]') # 通用匹配所有/model/路径下的名称链接,可复用获取其他模特名称 # name_element = driver.find_element(By.CSS_SELECTOR, 'a[href^="/model/"]') print(name_element.text)
内容的提问来源于stack exchange,提问作者zackchess20
相关产品推荐
相关产品推荐

