Python使用Selenium的find_element_by_class_name无法抓取数据报错
问题描述
我是网页抓取新手,无开发经验也不了解HTML相关知识,尝试登录网站后从个人账户页面提取信息时,调用find_element_by_class_name()方法出现报错。
已尝试的代码
from selenium import webdriver driver = webdriver.Chrome('path/chromedriver.exe') driver.get("https://www.URL.COM") # 手动登录账户并跳转至目标页面 driver.find_element_by_class_name('css-901oao css-cens5h r-1khnkhu r-13awgt0 r-1oke55r r-1enofrn r-1wzrnnt')
报错信息
--------------------------------------------------------------------------- NoSuchElementException Traceback (most recent call last) ~\AppData\Local\Temp/ipykernel_14516/1270707966.py in <module> ----> 1 driver.find_element_by_class_name('css-901oao css-cens5h r-1khnkhu r-13awgt0 r-1oke55r r-1enofrn r-1wzrnnt') C:\ProgramData\Miniconda3\lib\site-packages\selenium\webdriver\remote\webdriver.py in find_element_by_class_name(self, name) 562 element = driver.find_element_by_class_name('foo') 563 """ ---> 564 return self.find_element(by=By.CLASS_NAME, value=name) 565 566 def find_elements_by_class_name(self, name):
其他失败尝试
driver.find_element_by_css_selector('css-901oao css-cens5h r-1khnkhu r-13awgt0 r-1oke55r r-1enofrn r-1wzrnnt')
目标元素截图

报错原因
find_element_by_class_name()方法仅支持传入单个class名称,你传入的是多个空格分隔的class组合,不符合方法要求。- 你写的css选择器语法错误:css选择器中class属性需要加
.作为前缀,多个并列class需要连写,空格在css选择器里代表查找后代元素,不是并列class的意思。
解决方法
方案1:使用css选择器(最稳定)
# 注意每个class前加.,多个class之间无空格 driver.find_element_by_css_selector('.css-901oao.css-cens5h.r-1khnkhu.r-13awgt0.r-1oke55r.r-1enofrn.r-1wzrnnt')
方案2:仅传入单个class名(适合该class全局唯一的场景)
# 任选其中一个class传入即可,不需要传全部 driver.find_element_by_class_name('css-901oao')
优化建议
手动登录跳转页面后,建议先添加全局等待逻辑,避免页面未完全加载就执行元素查找也会触发NoSuchElementException报错,完整示例如下:
from selenium import webdriver driver = webdriver.Chrome('path/chromedriver.exe') driver.implicitly_wait(10) # 全局设置最多等待10秒查找元素,找不到才抛出异常 driver.get("https://www.URL.COM") # 手动登录账户并跳转至目标页面 # 再执行元素查找代码
内容的提问来源于stack exchange,提问作者ViSa
相关产品推荐
相关产品推荐

