使用Selenium获取python.org事件列表时触发InvalidSelectorException异常求助
解决Selenium获取python.org事件列表的InvalidSelectorException异常
问题根源
- 选择器类型不匹配:你用
By.CLASS_NAME却传入了.event-widget time这种CSS复合选择器,CLASS_NAME只能接受单个类名,这直接触发了异常。 - 元素获取方法错误:要获取多个事件时间元素,得用
find_elements而非find_element,后者只返回单个元素,遍历会报错。 - 路径转义问题:Windows路径里的
\在Python中是转义字符,直接写会导致解析错误,需要改成原始字符串(加r前缀)或者把\替换为\\。
修正后的代码
from selenium import webdriver from selenium.webdriver.common.by import By # 用原始字符串处理Windows路径,避免转义问题 chrome_driver_path = r"C:\development\chromedriver.exe" driver = webdriver.Chrome(executable_path=chrome_driver_path) driver.get("https://python.org") # 改用By.CSS_SELECTOR传入复合选择器,同时用find_elements获取所有匹配元素 event_times = driver.find_elements(By.CSS_SELECTOR, ".event-widget time") for time in event_times: print(time.text) # 用完浏览器记得退出,避免残留进程 driver.quit()
另一种写法(分步定位)
如果坚持想用类名定位,可以先找到事件容器,再在容器内查找time元素:
from selenium import webdriver from selenium.webdriver.common.by import By chrome_driver_path = r"C:\development\chromedriver.exe" driver = webdriver.Chrome(executable_path=chrome_driver_path) driver.get("https://python.org") event_widget = driver.find_element(By.CLASS_NAME, "event-widget") event_times = event_widget.find_elements(By.TAG_NAME, "time") for time in event_times: print(time.text) driver.quit()
内容的提问来源于stack exchange,提问作者Adekeye Joshua
相关产品推荐
相关产品推荐

