如何通过Selenium获取Gibiru图片搜索结果中img标签的src属性值
解决Gibiru图片搜索爬虫无法定位img元素的问题
问题核心
你遇到的NoSuchElementException主要来自三个原因:
- 页面动态渲染延迟:Gibiru的图片搜索结果是异步加载的,代码未等待元素完全渲染就直接查找
- 绝对定位器脆弱:使用的全路径XPATH依赖固定页面结构,一旦页面布局微调就会失效
- 缺少必要的等待环节:点击图片标签后,结果区域需要时间加载,直接查找会失败
修正方案
1. 改用显式等待
使用Selenium的WebDriverWait等待元素满足可交互/可见条件,替代直接调用find_element,避免加载延迟问题。
2. 使用稳定定位器
目标img标签有唯一的类组合gs-image gs-image-scalable,可以直接用CSS选择器定位,比绝对XPATH更可靠。
完整修正代码
from selenium import webdriver from selenium.webdriver.common.by import By from selenium.webdriver.common.keys import Keys from selenium.webdriver.support.ui import WebDriverWait from selenium.webdriver.support import expected_conditions as EC # 初始化浏览器和等待器 driver = webdriver.Chrome() wait = WebDriverWait(driver, 10) # 设置10秒超时时间 # 访问Gibiru主页 driver.get("https://gibiru.com/") # 定位搜索框并执行搜索 search_box = wait.until(EC.element_to_be_clickable((By.CSS_SELECTOR, '.form-control.has-feedback.has-clear'))) search_box.send_keys("lfc") search_box.send_keys(Keys.RETURN) # 等待图片标签可点击并切换到图片结果 image_tab = wait.until(EC.element_to_be_clickable((By.XPATH, "//div[contains(text(), 'Images')]"))) image_tab.click() # 等待第一张图片加载完成并获取src属性 first_img = wait.until(EC.visibility_of_element_located((By.CSS_SELECTOR, "img.gs-image.gs-image-scalable"))) print(first_img.get_attribute("src")) # 关闭浏览器 driver.quit()
扩展说明
如果需要批量获取所有图片的src,把visibility_of_element_located换成visibility_of_all_elements_located,用find_elements遍历结果:
all_imgs = wait.until(EC.visibility_of_all_elements_located((By.CSS_SELECTOR, "img.gs-image.gs-image-scalable"))) for img in all_imgs: print(img.get_attribute("src"))
内容的提问来源于stack exchange,提问作者AnxiousDino
相关产品推荐
相关产品推荐

