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

如何使用Python+Selenium爬取Udemy平台的课程价格

定位失败的核心原因

  1. 语法错误:你写的XPath表达式//div[contains(@class, "price-text--price-part"]少了右括号,且Selenium 4.0+版本已废弃find_element_by_xpath这类方法,必须通过By类指定定位方式。
  2. 固定等待不可靠:页面内容是异步动态渲染的,2秒不一定能完成所有资源加载,元素没渲染出来自然定位不到。
  3. 匹配规则错误:你写的CSS选择器规则完全错误,把属性名和属性值搞混了。

正确实现方案

首先需要额外导入三个依赖处理定位和等待逻辑,同时添加反爬配置避免Udemy识别到自动化工具拦截访问:

import time
from selenium import webdriver
from selenium.webdriver.chrome.options import Options
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

options = Options()
# 不需要可视化窗口可以打开无头模式
# options.add_argument("--headless=new")
options.add_argument("--disable-blink-features=AutomationControlled")
options.add_experimental_option("excludeSwitches", ["enable-automation"])
options.add_experimental_option('useAutomationExtension', False)

driver = webdriver.Chrome(ChromeDriverManager().install(), options=options)
# 抹除webdriver特征
driver.execute_cdp_cmd('Page.addScriptToEvaluateOnNewDocument', {
    'source': 'Object.defineProperty(navigator, "webdriver", {get: () => undefined})'
})

url = "https://www.udemy.com/courses/development/?p=1"
driver.get(url)

# 最长等待10秒,直到所有价格元素加载完成
wait = WebDriverWait(driver, 10)
price_elements = wait.until(EC.presence_of_all_elements_located(
    (By.CSS_SELECTOR, 'div[class*="price-text--price-part"]')
))

# 遍历输出所有课程价格
for element in price_elements:
    print(element.text.strip())

driver.quit()

补充说明

如果运行后还是拿不到元素,可以先打印当前页面源码确认是否正常加载,部分地区访问Udemy可能会触发人机验证,手动过验证后即可正常抓取。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.28 20:06:03