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

Python Selenium爬取CJdropshipping产品信息遇Ng-show隐藏问题求助

爬取CJdropshipping隐藏元素的可行方案

问题说明

尝试爬取CJdropshipping商品页面的商品描述与发货时间,但目标信息被ng-show指令隐藏,现有代码无法成功获取。当前代码如下:

from selenium import webdriver
from selenium.webdriver.common.by import By


# Set up the Chrome driver
driver = webdriver.Chrome()

# Navigate to the website
driver.get("https://cjdropshipping.com/product/silicone-grip-device-finger-exercise-stretcher-finger-gripper-strength-trainer-strengthen-rehabilitation-training-p-1614453269613522944.html?from=HTP")

# Find the element that contains the title of the product
title_element = driver.find_element(By.CSS_SELECTOR, 'div > div > div > div > div > div > pro-detail > div').get_attribute("textContent")
print(title_element)
# Extract the text from the element
title = title_element.text

# Print the title
print(title)

# Close the driver
driver.quit()

解决思路与代码实现

针对ng-show隐藏元素的爬取,核心是处理AngularJS渲染的动态内容,同时获取隐藏元素的文本内容:

  1. 使用显式等待确保页面渲染完成:Angular页面加载需要时间,显式等待能避免元素未加载就执行定位操作。
  2. 获取隐藏元素的文本:ng-show隐藏的元素通常是display:none,无法直接用.text获取,需通过get_attribute('textContent')或执行JavaScript获取。
  3. 精准定位目标元素:替换宽泛的CSS选择器,定位到商品描述和发货时间的具体容器。

修改后的代码如下:

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

# 初始化Chrome驱动
driver = webdriver.Chrome()
wait = WebDriverWait(driver, 15)  # 设置15秒最大等待时间

try:
    driver.get("https://cjdropshipping.com/product/silicone-grip-device-finger-exercise-stretcher-finger-gripper-strength-trainer-strengthen-rehabilitation-training-p-1614453269613522944.html?from=HTP")
    
    # 等待商品标题加载完成
    title = wait.until(EC.presence_of_element_located((By.CSS_SELECTOR, 'h1.product-name'))).text
    print(f"商品标题: {title}")
    
    # 获取商品描述(处理ng-show隐藏元素)
    desc_element = wait.until(EC.presence_of_element_located((By.CSS_SELECTOR, 'div.product-description')))
    product_desc = desc_element.get_attribute('textContent').strip()
    print(f"\n商品描述: {product_desc}")
    
    # 获取发货时间
    shipping_element = wait.until(EC.presence_of_element_located((By.CSS_SELECTOR, 'div.shipping-info-content')))
    shipping_time = shipping_element.get_attribute('textContent').strip()
    print(f"\n发货时间: {shipping_time}")
    
finally:
    driver.quit()

额外注意事项

  • 如果上述选择器失效,可通过Chrome开发者工具的Elements面板,右键目标元素复制精准的CSS选择器或XPath。
  • 若页面有反爬机制,可添加随机延迟、更换User-Agent,或使用无头模式:
    options = webdriver.ChromeOptions()
    options.add_argument('--headless=new')
    options.add_argument('--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"')
    driver = webdriver.Chrome(options=options)
    

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.30 04:53:35