如何使用Python Selenium爬取网站图片?McMaster网站iframe问题求助
解决McMaster网站Selenium爬取图片的问题
嘿,我来帮你搞定这个爬取图片的问题!你遇到的情况大概率是页面动态加载、iframe定位不准确或者图片懒加载导致的,咱们一步步来排查:
1. 先确认iframe的定位是否正确
你用的ResultsIFrame可能不是页面实际加载的iframe ID,或者iframe是动态生成的,直接查找会找不到。建议用显式等待来确保iframe加载完成再切换:
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.Firefox() driver.get("https://www.mcmaster.com") # 显式等待iframe出现并可切换 wait = WebDriverWait(driver, 10) iframe = wait.until(EC.frame_to_be_available_and_switch_to_it((By.ID, "ResultsIFrame"))) # 现在直接查找图片元素,而非只打印源码 images = driver.find_elements(By.TAG_NAME, "img") for img in images: # 优先取真实地址,懒加载图片可能存在data-src里 print(img.get_attribute("src") or img.get_attribute("data-src"))
2. 处理图片懒加载
很多电商网站会用懒加载策略,图片的真实地址可能存在data-src、data-lazy这类属性里,而非直接在src标签中。所以别只盯着src,要检查这些备用属性。
3. 等待页面完全加载并触发懒加载
McMaster的页面内容可能需要时间渲染,尤其是图片资源。可以添加页面加载等待,或者滚动页面触发懒加载的图片加载:
# 滚动到页面底部,触发懒加载图片的加载 driver.execute_script("window.scrollTo(0, document.body.scrollHeight);") # 等待几秒让图片资源加载完成 driver.implicitly_wait(5)
4. 别忘了切换回默认上下文
如果你切换到iframe后还需要操作主页面的元素,一定要记得切换回默认上下文:
driver.switch_to.default_content()
额外提示:应对反爬机制
McMaster可能有反爬策略,会检测Selenium的自动化特征。你可以给浏览器添加配置,模拟真实用户的访问行为:
options = webdriver.FirefoxOptions() options.add_argument("--disable-blink-features=AutomationControlled") options.add_argument("user-agent=Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/114.0.0.0 Safari/537.36") driver = webdriver.Firefox(options=options)
内容的提问来源于stack exchange,提问作者Chris
相关产品推荐
相关产品推荐

