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

如何抓取点击按钮后加载的联系电话及无class的咨询费文本?

网页抓取问题解决方案

问题1:点击按钮后才显示的联系电话抓取

问题原因

你当前用BeautifulSoup只能获取页面初始加载的静态HTML内容,联系电话是点击「CALL NOW」按钮后通过JS动态请求/渲染的内容,不在初始HTML里,所以静态抓取无法拿到数据。

可选解决方案

  • 方案1:抓后端接口
    打开浏览器F12开发者工具,切换到「网络」面板,点击「CALL NOW」按钮,筛选触发的新请求,找到返回手机号码的接口,直接模拟请求该接口获取数据,性能远高于模拟浏览器。
  • 方案2:模拟浏览器动态渲染
    使用Selenium、Playwright等无头浏览器工具,模拟点击按钮后等待元素加载再取值,示例代码如下:
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

# 初始化浏览器
driver = webdriver.Chrome()
driver.get("目标URL")
# 模拟点击CALL NOW按钮
driver.find_element(By.XPATH, '//button[text()="CALL NOW"]').click()
# 最多等待10秒,直到号码元素加载完成
try:
    contact_ele = WebDriverWait(driver, 10).until(
        EC.presence_of_element_located((By.CLASS_NAME, 'c-vn-full__number u-bold'))
    )
    contact = contact_ele.text.strip()
except:
    contact = "N/A"

问题2:无class属性的咨询费(Price)文本提取

没有class属性时可以通过以下几种常用方式定位元素:

  • XPATH相对定位:依托固定的相邻元素定位,比如价格字段前的文本是固定的「咨询费(Price)」,如果HTML结构为<span>咨询费(Price)</span><span>¥300/次</span>,可以用如下XPATH直接定位价格元素://span[text()="咨询费(Price)"]/following-sibling::span[1],BeautifulSoup也可以用find的next_sibling方法实现同样逻辑。
  • 位置索引定位:如果价格元素在父标签下的顺序固定,先定位到父元素,再提取对应位置的子元素文本即可,示例:parent_node.find_all('p')[2].text.strip()(取父元素下第3个p标签的文本)。
  • 正则特征匹配:如果价格有统一格式特征(如带¥符号、数字+单位结构),可以先提取父级区域的全部文本,再用正则匹配符合格式的价格内容。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.20 10:24:03