You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Selenium无法定位按钮弹出小窗口内元素的问题求助

问题:爬取诊所WhatsApp号码时无法定位元素

尝试从指定网站爬取诊所的WhatsApp号码,流程为:进入诊所详情页后点击id为view-whatsapp的按钮,弹出的窗口中存在类名为fs-text-2 whatsapp-click-stats的号码元素,但执行代码时抛出NoSuchElementException错误,无法定位该元素。

错误信息

selenium.common.exceptions.NoSuchElementException: Message: no such element: Unable to locate element: {"method":"css selector","selector":".fs-text-2 whatsapp-click-stats"}

问题原因

  1. 类名定位逻辑错误:find_element_by_class_name仅支持单个类名输入,传入空格分隔的多个类名时,会被解析为CSS后代元素查找规则,导致定位失败。
  2. 未等待弹窗加载完成:点击按钮后弹窗需要渲染时间,直接查找元素会因元素未加载而报错。
  3. 隐式等待与显式等待冲突:代码中设置的implicitly_wait(50)会与显式等待逻辑冲突,导致等待机制混乱。

解决方法

  • 改用CSS选择器定位多类名元素:对于包含多个类名的元素,使用By.CSS_SELECTOR,语法为.类名1.类名2(类名间用点连接,无空格)。
  • 添加显式等待:点击按钮后,显式等待号码元素加载完成,确保元素可被正常定位。
  • 优先使用显式等待:移除隐式等待设置,避免两种等待机制冲突。

修改后的代码

from selenium import webdriver
from selenium.webdriver.common.by import By
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC

url = "https://infoguia.com/bnom.asp?txt=clinicas&est=100"

# 初始化Chrome驱动
driver = webdriver.Chrome(r'C:\Users\hamxa\Desktop\Chromdriver\chromedriver.exe')
driver.get(url)

# 等待诊所列表加载完成并获取元素
clinics = WebDriverWait(driver, 10).until(
    EC.presence_of_all_elements_located((By.CSS_SELECTOR, ".grey-btn-profile.fs-text-button-1.fw-bold"))
)

# 遍历每个诊所获取WhatsApp号码
for clinic in clinics:
    clinic.click()
    try:
        # 等待WhatsApp按钮可点击并点击
        whatsapp_button = WebDriverWait(driver, 10).until(
            EC.element_to_be_clickable((By.ID, "view-whatsapp"))
        )
        whatsapp_button.click()
        
        # 等待号码元素可见并获取文本
        number_element = WebDriverWait(driver, 10).until(
            EC.visibility_of_element_located((By.CSS_SELECTOR, ".fs-text-2.whatsapp-click-stats"))
        )
        print(number_element.text)
    finally:
        driver.back()

# 关闭浏览器驱动
driver.quit()

内容的提问来源于stack exchange,提问作者Hamza Waheed

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.24 23:07:31