Selenium脚本问题:前两步正常,获取Google首条搜索结果失败求助
排查并修复Selenium自动化脚本的问题
核心错误分析
搜索结果定位完全错误
原代码通过By.NAME, "g"和By.NAME, "r"定位元素,但Google搜索结果页面不存在这些name属性的元素,这是第三步无法执行的根本原因。同时driver.find_element()返回单个元素,不能用[0]索引,需用driver.find_elements()获取元素列表(或直接定位目标元素)。h2元素遍历语法错误
driver.find_element(By.TAG_NAME, ‘h2’)返回单个元素,无法循环遍历,需改为driver.find_elements()。- 代码使用了中文单引号
‘h2’,会触发语法错误,必须替换为英文单引号'h2'。
硬等待稳定性差
依赖time.sleep()硬等待容易因网络波动、页面加载慢导致元素未就绪,建议改用显式等待提升脚本可靠性。
修正后的完整代码
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() wait = WebDriverWait(driver, 10) # 设置10秒超时等待 # 1. 访问Google driver.get('https://www.google.com/') # 2. 搜索指定关键词 search_box = wait.until(EC.presence_of_element_located((By.NAME, "q"))) search_box.send_keys('スタビジ') search_box.submit() # 3. 获取并点击首条搜索结果 # 定位首条结果的标题链接(匹配Google搜索页面实际结构) first_result_link = wait.until(EC.element_to_be_clickable((By.CSS_SELECTOR, "div.g a h3"))) first_result_link.click() # 4. 等待目标页面加载完成 wait.until(EC.presence_of_element_located((By.TAG_NAME, 'h2'))) # 5. 获取页面h2元素 h2_elements = driver.find_elements(By.TAG_NAME, 'h2') for h2 in h2_elements: print(h2.text) # 6. 截取网页截图 driver.maximize_window() driver.save_screenshot('スタビジ.png') # 关闭浏览器 driver.quit()
关键修正说明
- 用
WebDriverWait显式等待替代硬等待,确保元素就绪后再执行操作,避免加载超时问题。 - 调整搜索结果定位逻辑,通过CSS选择器匹配Google搜索结果的标准结构(首条结果标题在
div.g下的a标签内的h3元素)。 - 修复h2元素遍历的语法错误,保证代码可正常执行。
内容的提问来源于stack exchange,提问作者Ota Yosuke
相关产品推荐
相关产品推荐

