使用Puppeteer调用Google Lens以图搜图遇无文件输入框上传难题
用Puppeteer实现Google Lens图片上传搜索
Google Lens的上传界面确实不会直接显示<input type="file">标签,这类元素通常被隐藏在UI按钮背后。你可以直接定位到这个隐藏的文件输入元素,然后调用Puppeteer的uploadFile方法完成上传,无需依赖可见按钮的冗余点击。
修改后的脚本示例
import puppeteer from 'puppeteer'; (async () => { const browser = await puppeteer.launch({ headless: false, args: [] }); const page = await browser.newPage(); await page.goto('https://www.google.com.my/imghp'); // 点击打开Google Lens入口按钮 const lensButton = await page.$('div.dRYYxd > div.nDcEnd'); await lensButton.click(); // 定位隐藏的文件输入元素(需注意:Google页面元素选择器可能随版本更新变化) const fileInput = await page.$('input[type="file"][accept="image/*,image/heif,image/heic"]'); // 直接调用上传方法,Puppeteer支持对隐藏元素执行此操作 await fileInput.uploadFile('./Cute-Cat.jpg'); // 等待搜索结果加载完成(可根据实际需求调整等待逻辑) await page.waitForNavigation({ waitUntil: 'networkidle2' }); // 后续可添加结果处理逻辑 // await browser.close(); })();
关键说明
- 精准定位隐藏input:通过
type="file"和accept属性组合定位,这是Google Lens上传功能对应的核心输入元素。如果选择器失效,可在浏览器开发者工具中手动查找最新的元素选择器。 - 简化交互流程:跳过多次点击可见按钮的步骤,直接操作核心输入元素,避免UI交互延迟导致的不稳定问题。
- 等待结果加载:上传完成后需等待页面导航或网络空闲,确保搜索结果完全渲染后再进行后续操作。
内容的提问来源于stack exchange,提问作者codingmickey
相关产品推荐
相关产品推荐

