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

如何使用Selenium获取指定类名值?价格爬取及Network header获取求助

解决Alfagift商品价格爬取问题:两种可行方案

方案一:修复原有Selenium代码直接获取价格

你的原代码无法获取价格有两个核心问题:

  1. By.CLASS_NAME不支持传入多个类名,你写的"text-xlg fw7 text-primary mb-1"是多个类的组合,应该用CSS选择器定位。
  2. 页面是动态渲染的,直接调用find_elements时元素可能还未加载完成,需要添加显式等待。

修改后的代码如下:

import requests
from selenium import webdriver
from webdriver_manager.chrome import ChromeDriverManager
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://alfagift.id/p/elmondo-jas-hujan-ceria-setelan-jaket-celana-759454'

options = webdriver.ChromeOptions() 
options.add_argument("start-maximized")
options.add_experimental_option("excludeSwitches", ["enable-automation"])
options.add_experimental_option('useAutomationExtension', False)
driver = webdriver.Chrome(ChromeDriverManager().install(),options=options)
driver.execute_script("Object.defineProperty(navigator, 'webdriver', {get: () => undefined})")
driver.execute_cdp_cmd('Network.setUserAgentOverride', {"userAgent": 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/83.0.4103.53 Safari/537.36'})

driver.get(url)

# 显式等待价格元素加载完成,最多等待10秒
price_element = WebDriverWait(driver, 10).until(
    EC.presence_of_element_located((By.CSS_SELECTOR, ".text-xlg.fw7.text-primary.mb-1"))
)

print(price_element.text)
driver.quit()

方案二:监听网络请求提取API数据(获取指定Network项的Header)

如果页面价格是通过API动态加载的,你可以通过监听浏览器的网络请求,找到携带商品ID(759454)和fingerprint的请求,提取其Header后直接请求API获取数据,效率比渲染页面更高。

实现代码如下:

from selenium import webdriver
from webdriver_manager.chrome import ChromeDriverManager
import requests

url='https://alfagift.id/p/elmondo-jas-hujan-ceria-setelan-jaket-celana-759454'
target_product_id = "759454"

options = webdriver.ChromeOptions() 
options.add_argument("start-maximized")
options.add_experimental_option("excludeSwitches", ["enable-automation"])
options.add_experimental_option('useAutomationExtension', False)
driver = webdriver.Chrome(ChromeDriverManager().install(),options=options)
driver.execute_script("Object.defineProperty(navigator, 'webdriver', {get: () => undefined})")
driver.execute_cdp_cmd('Network.setUserAgentOverride', {"userAgent": 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/83.0.4103.53 Safari/537.36'})

# 启用网络请求监听
driver.execute_cdp_cmd('Network.enable', {})

# 存储目标请求的信息
target_request = None

def capture_requests(request):
    global target_request
    # 筛选包含商品ID和fingerprint的请求
    if target_product_id in request['url'] and 'fingerprint' in request['headers']:
        target_request = request
        print("找到目标请求:", request['url'])
        print("请求Header:", request['headers'])

# 添加请求监听回调
driver.execute_cdp_cmd('Network.requestWillBeSent', {}, lambda params: capture_requests(params))

driver.get(url)

# 等待目标请求捕获(可根据实际情况调整等待时间)
import time
time.sleep(3)

if target_request:
    # 提取必要的Header和URL
    api_url = target_request['url']
    headers = target_request['headers']
    # 用requests发送请求获取数据
    response = requests.get(api_url, headers=headers)
    data = response.json()
    # 从返回的JSON中提取价格(需根据实际API返回结构调整)
    price = data.get('data', {}).get('price', '未找到价格')
    print("商品价格:", price)

driver.quit()

注意事项

  • API返回的JSON结构需要你自己在浏览器开发者工具中查看,调整代码中提取价格的逻辑。
  • fingerprint等Header可能有有效期,若请求失败需重新获取最新的Header。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.09 05:40:41