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

如何抓取点击触发后才显示的网页电话号码?

解决点击后显示的电话号码抓取问题

你用requests获取的是页面初始的静态HTML代码,而目标电话号码是通过JavaScript动态加载的——只有点击触发后,页面才会请求后端数据并把号码渲染出来,所以直接用BeautifulSoup找不到对应的元素。

给你两种可行的解决方法:

方法一:用Selenium模拟浏览器操作

这种方法模拟真实用户的浏览行为,能处理动态加载的内容:

  1. 先安装依赖包和浏览器驱动:
    • 执行pip install selenium安装Selenium
    • 下载对应浏览器的驱动(比如ChromeDriver,要和你的浏览器版本匹配)
  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://hipages.com.au/connect/makermanservices"

# 初始化Chrome驱动(注意替换成你的ChromeDriver路径,或配置到环境变量)
driver = webdriver.Chrome()
driver.get(url)

try:
    # 等待显示电话的按钮加载完成并点击
    show_phone_btn = WebDriverWait(driver, 10).until(
        EC.element_to_be_clickable((By.CLASS_NAME, "phone-number__trigger"))
    )
    show_phone_btn.click()

    # 等待电话号码元素出现并获取文本
    phone_element = WebDriverWait(driver, 10).until(
        EC.presence_of_element_located((By.CLASS_NAME, "phone-number__mobile"))
    )
    print(phone_element.text)
finally:
    # 关闭浏览器
    driver.quit()

注:如果触发按钮的class不是phone-number__trigger,需要自己打开浏览器开发者工具查看实际的元素标识

方法二:直接调用后端API接口

这种方法效率更高,不需要模拟浏览器,需要分析页面的网络请求:

  1. 打开浏览器F12进入开发者工具,切换到「Network」标签
  2. 点击页面上显示电话的按钮,观察出现的XHR请求,找到返回电话号码的API接口
  3. 复制该接口的URL,以及请求头里的User-Agent、Cookie等信息,用requests直接调用:
import requests

# 复制浏览器请求中的headers,确保请求能被服务器正常响应
headers = {
    "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/118.0.0.0 Safari/537.36",
    "Cookie": "这里替换成你浏览器中的Cookie内容"
}

# 替换成实际找到的API接口URL
api_url = "https://hipages.com.au/api/xxx/phone"
response = requests.get(api_url, headers=headers)
phone_info = response.json()
print(phone_info.get("phone"))

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.24 11:22:47