首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Selenium找不到类名的元素

Selenium找不到类名的元素
EN

Stack Overflow用户
提问于 2022-10-14 06:47:16
回答 2查看 128关注 0票数 -1

我想做一个爬虫收集一些信息从一个网站。为此,我使用Python和Selenium。问题是不能用类名找到元素,而是可以使用XPATH找到元素。我为此使用的代码如下所示:

HTML:

代码语言:javascript
复制
<h1 class="txt-h4 clr-900 lf-2">
Xiaomi Redmi Note 11 Dual SIM 128GB And 6GB RAM Mobile Phone
</h1>

Selenium XPATH:(工作解决方案)

代码语言:javascript
复制
product_name = driver.find_element(By.XPATH, "/html/body/div[1]/div[1]/div[3]/div[3]/div[2]/div[2]/div[2]/div[1]/div/h1").text.strip()

Selenium类名:(不工作解决方案)

代码语言:javascript
复制
product_name = driver.find_element(By.CLASS_NAME, "txt-h4 clr-900 lf-2").text.strip()

我还使用beautifulsoup4尝试了这种方法,但是类名的结果是一样的:

代码语言:javascript
复制
product_name = page_soup.find("h1", {"class":['txt-h4 clr-900 lf-2']}).text.strip()

我在这个解决方案中遇到的错误是:

代码语言:javascript
复制
AttributeError: 'NoneType' object has no attribute 'text'

由于粒度的原因,我需要做的是能够通过类名定位元素。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2022-10-14 06:55:27

不能使用“按类名进行搜索”,因为该元素有多个类,此方法将提供的字符串与每个类进行比较。

这里唯一的解决方案是使用以下方法进行搜索:

xpath

代码语言:javascript
复制
driver.find_element(By.XPATH, "//*[@class='txt-h4 clr-900 lf-2']")

或css选择器

代码语言:javascript
复制
driver.find_element(By.CSS_SELECTOR, ".txt-h4.clr-900.lf-2")
票数 1
EN

Stack Overflow用户

发布于 2022-10-14 06:57:44

您无法获得它,因为您枚举多个类。

而不是这一行product_name = driver.find_element(By.CLASS_NAME, "txt-h4 clr-900 lf-2").text.strip()

您应该使用这一行product_name = driver.find_element(By.CLASS_NAME, "txt-h4").text.strip()

不是"txt-h4 clr-900 lf-2",而是"txt-h4"

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/74065329

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档