Selenium点击谷歌首个链接失败+executable_path弃用问题修复求助
问题修复方案
1. 解决executable_path弃用警告
Selenium 4.x 已经弃用了直接通过webdriver.Chrome()传入驱动路径的写法,需要改用ChromeService类来管理驱动文件:
- 新增导入
from selenium.webdriver.chrome.service import Service - 用
Service实例包装驱动路径,再传递给webdriver.Chrome()
2. 修复无法点击搜索结果的问题
原代码的核心问题包括:
- 依赖
time.sleep硬等待,页面加载速度波动时容易出现元素定位失败 - 直接用
tag name="h3"定位可能匹配到非搜索结果的元素(比如页面顶部的导航类h3) - 部分场景下h3元素本身不可点击,真正可触发跳转的是其包裹的
<a>标签
完整修复后的代码
from selenium import webdriver from selenium.webdriver.chrome.service import Service from selenium.webdriver.common.keys import Keys from selenium.webdriver.common.by import By from selenium.webdriver.support.ui import WebDriverWait from selenium.webdriver.support import expected_conditions as EC kaupunki = "Helsinki" # 路径前加r避免转义字符解析错误 PATH = r"C:\Program Files (x86)\selenium\chromedriver.exe" service = Service(PATH) driver = webdriver.Chrome(service=service) try: driver.get("https://www.google.com") # 显式等待同意按钮加载完成并点击 accept_btn = WebDriverWait(driver, 10).until( EC.element_to_be_clickable((By.XPATH, '//*[@id="L2AGLb"]/div')) ) accept_btn.click() # 等待搜索框出现并输入内容 search_box = WebDriverWait(driver, 10).until( EC.presence_of_element_located((By.NAME, 'q')) ) search_box.send_keys("airbnb ", kaupunki) search_box.send_keys(Keys.ENTER) # 等待第一个搜索结果的可点击链接并触发点击 first_result = WebDriverWait(driver, 10).until( EC.element_to_be_clickable((By.CSS_SELECTOR, "div.g a h3")) ) first_result.click() finally: # 可根据需求选择是否自动关闭浏览器 # driver.quit() pass
关键改进说明
- 用
WebDriverWait显式等待替代time.sleep,确保元素就绪后再操作,大幅提升稳定性 - 通过
CSS_SELECTOR精准定位搜索结果区域内的h3标签,避免误触非目标元素 - 路径字符串前加
r,防止反斜杠被解析为转义字符导致路径错误 - 用
try-finally块保证浏览器资源能正确释放
内容的提问来源于stack exchange,提问作者somebody
相关产品推荐
相关产品推荐

