Chrome升级至114及更高版本后CSS选择器返回空集求助
问题原因与解决方案
谷歌搜索页面的DOM结构在Chrome 114及后续版本中发生了变更,你原使用的div.yuRUbf > a选择器对应的元素类名已被替换,导致无法定位到搜索结果链接。以下是具体解决步骤:
1. 确认当前搜索结果的DOM结构
打开Chrome开发者工具(F12),定位任意一条搜索结果的链接,查看其父级容器的类名。目前谷歌搜索结果的标准结构中,单个结果的容器通常是带有g类的div,链接的常见路径为div.g > div > a或div.g div[data-hveid] > a(可根据实际页面微调)。
2. 替换为有效的定位选择器
替换原有的CSS选择器,或改用兼容性更强的XPATH:
- 新CSS选择器示例:
search_results = wait.until(EC.visibility_of_all_elements_located((By.CSS_SELECTOR, "div.g > div > a"))) - XPATH定位示例:
search_results = wait.until(EC.visibility_of_all_elements_located((By.XPATH, "//div[@class='g']//a[@href]")))
3. 优化等待条件
优先使用visibility_of_all_elements_located而非presence_of_all_elements_located,确保元素不仅存在于DOM中,还处于可见状态,避免因元素未完全渲染导致的空集问题。
4. 增强反爬规避(可选)
- 模拟真实用户行为:搜索后添加页面滚动操作,触发结果加载:
driver.execute_script("window.scrollTo(0, document.body.scrollHeight);") - 优化CAPTCHA检测逻辑,直接定位验证元素而非仅检查源码:
try: wait.until(EC.presence_of_element_located((By.CSS_SELECTOR, "div.recaptcha"))) print('Captcha') break except TimeoutException: pass
修改后的完整代码示例
from selenium.webdriver.support.ui import WebDriverWait from selenium.webdriver.support import expected_conditions as EC from selenium.webdriver.common.by import By from selenium.common.exceptions import TimeoutException from selenium.webdriver.common.keys import Keys import time # 搜索执行 search_input.send_keys(Keys.ENTER) wait = WebDriverWait(driver, 15) # 检查CAPTCHA try: wait.until(EC.presence_of_element_located((By.CSS_SELECTOR, "div.recaptcha"))) print('Captcha') break except TimeoutException: pass # 定位搜索结果 try: search_results = wait.until(EC.visibility_of_all_elements_located((By.CSS_SELECTOR, "div.g > div > a"))) print(f"找到{len(search_results)}条结果") for result in search_results: print(result.get_attribute("href")) except TimeoutException: print("未找到搜索结果或页面加载超时")
内容的提问来源于stack exchange,提问作者SQLLER
相关产品推荐
相关产品推荐

