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

求助:使用Selenium提取Python.org即将举办活动信息的方法

Python.org「Upcoming Events」信息提取方案

前置说明

你遇到的InvalidArgumentException大概率是因为使用了Selenium已弃用的旧语法(如find_element_by_css_selector),或是选择器语法错误、元素未加载完成就执行查找操作。下面是基于Selenium最新API的两种提取实现方式:


一、使用CSS_SELECTOR提取

完整代码示例

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()
driver.get("https://www.python.org/")

try:
    # 显式等待活动板块加载完成,避免元素未就绪报错
    WebDriverWait(driver, 10).until(
        EC.presence_of_element_located((By.CSS_SELECTOR, ".event-widget.last ul.menu"))
    )
    
    # 定位所有活动列表项
    event_items = driver.find_elements(By.CSS_SELECTOR, ".event-widget.last ul.menu li")
    
    # 遍历提取每个活动的信息
    for item in event_items:
        # 提取日期:可选显示文本或完整datetime属性值
        date_text = item.find_element(By.CSS_SELECTOR, "time").text
        date_full = item.find_element(By.CSS_SELECTOR, "time").get_attribute("datetime")
        # 提取活动标题和链接
        event_title = item.find_element(By.CSS_SELECTOR, "a").text
        event_link = item.find_element(By.CSS_SELECTOR, "a").get_attribute("href")
        
        print(f"日期:{date_text}(完整时间:{date_full})")
        print(f"活动:{event_title}")
        print(f"链接:{event_link}\n")
        
finally:
    driver.quit()

选择器说明

  • 活动板块定位:.event-widget.last 直接匹配「Upcoming Events」所在容器,比长路径选择器更稳定,避免DOM结构变动导致失效
  • 活动项定位:ul.menu li 匹配板块下的所有活动列表项
  • 子元素定位:time 和 a 直接在活动项内部查找对应元素,无需完整路径

二、使用XPATH提取

完整代码示例

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("https://www.python.org/")

try:
    # 显式等待活动板块加载
    WebDriverWait(driver, 10).until(
        EC.presence_of_element_located((By.XPATH, "//div[contains(@class, 'event-widget') and contains(@class, 'last')]//ul[@class='menu']"))
    )
    
    # 定位所有活动列表项
    event_items = driver.find_elements(By.XPATH, "//div[contains(@class, 'event-widget') and contains(@class, 'last')]//ul[@class='menu']/li")
    
    # 遍历提取信息
    for item in event_items:
        date_text = item.find_element(By.XPATH, "./time").text
        date_full = item.find_element(By.XPATH, "./time").get_attribute("datetime")
        event_title = item.find_element(By.XPATH, "./a").text
        event_link = item.find_element(By.XPATH, "./a").get_attribute("href")
        
        print(f"日期:{date_text}(完整时间:{date_full})")
        print(f"活动:{event_title}")
        print(f"链接:{event_link}\n")
        
finally:
    driver.quit()

XPATH说明

  • 活动容器定位://div[contains(@class, 'event-widget') and contains(@class, 'last')] 匹配同时包含event-widget和last类的div,精准定位「Upcoming Events」板块
  • 活动项定位://ul[@class='menu']/li 匹配板块下的所有列表项
  • 子元素定位:./time 和 ./a 使用相对路径在当前活动项内部查找元素,提升查找效率

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.05 16:45:30