使用Selenium WebDriver无法打印Python官网活动信息的问题排查
问题排查与解决
你的代码无法打印活动名称,大概率是以下两个核心原因导致的:
1. 页面元素未加载完成就执行查找操作
Selenium打开页面后会立即执行find_elements,但Python官网的活动区域可能还没渲染完毕,导致获取到的events_names是空列表,自然没有内容可打印。
解决方法:添加显式等待,等待目标元素加载完成后再进行查找:
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_options = webdriver.ChromeOptions() chrome_options.add_experimental_option("detach", True) driver = webdriver.Chrome(options=chrome_options) driver.get("https://www.python.org") # 等待活动链接元素加载,最多等10秒 wait = WebDriverWait(driver, 10) events_names = wait.until(EC.presence_of_all_elements_located((By.CSS_SELECTOR, ".event_widget li a"))) for name in events_names: print(name.text) driver.quit()
2. CSS选择器已失效
Python官网的DOM结构可能有更新,原来的.event_widget li a选择器可能不再匹配目标元素。你可以手动验证:
- 打开Python官网,按F12打开开发者工具
- 在控制台输入
document.querySelectorAll(".event_widget li a"),查看是否能返回活动名称元素 - 如果返回空,说明选择器需要调整,比如当前官网的活动区域类名是
list-recent-events,对应的选择器可改为#events-widget .list-recent-events li a
调整后的代码示例:
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_options = webdriver.ChromeOptions() chrome_options.add_experimental_option("detach", True) driver = webdriver.Chrome(options=chrome_options) driver.get("https://www.python.org") wait = WebDriverWait(driver, 10) # 使用更新后的选择器 events_names = wait.until(EC.presence_of_all_elements_located((By.CSS_SELECTOR, "#events-widget .list-recent-events li a"))) for name in events_names: print(name.text) driver.quit()
额外排查点
如果以上方法都无效,检查:
- 浏览器驱动版本是否与你的Chrome版本匹配,版本不兼容会导致元素查找异常
- 是否有浏览器扩展(如广告拦截器)干扰页面加载,尝试禁用扩展后再运行代码
内容的提问来源于stack exchange,提问作者user23463469
相关产品推荐
相关产品推荐

