提问人:Jeff_V 提问时间:8/8/2023 最后编辑:Jeff_V 更新时间:8/9/2023 访问量:37
为什么我的 Selenium 抓取工具为不同的查询返回相同的图像源?
Why is my Selenium scraper returning the same image source for different queries?
问:
我在 Express 服务器上设置了以下 Google 图片抓取工具。它接受一个查询数组,并应该返回每个查询的第一个图像结果值的数组,即每个查询的单独 Google 图片搜索。src
let queryArr = ['cat', 'dog', 'cheeta', 'boy', 'girl', 'lion']
let driver = undefined;
const startSelenium = async () => {
const options = new Options();
options.addArguments('--headless')
options.addArguments('--no-sandbox')
options.addArguments('--incognito')
driver = await new Builder().forBrowser('chrome').setChromeOptions(options).build();
}
const Scrape = async (queryArr) => {
if (!driver) {
await startSelenium();
}
try {
let imgSources = [];
for (const query of queryArr) {
const url = `https://www.google.com/search?site=&tbm=isch&source=hp&biw=1873&bih=990&q=${query}`;
await driver.get(url);
const img = await driver.findElement(By.className('Q4LuWd'));
const imgSrc = await img.getAttribute('src');
imgSources.push(imgSrc);
}
return imgSources;
} catch (e) {
console.log(`Scrape() error: \n${e}`);
}
};
此基本逻辑适用于单个搜索,但是当传递这样的查询数组时,它会返回第一个查询的六次。我尝试了几种不同的方法,包括、等,但我没有运气。我该如何解决这个问题?src
sleep()
until
另外,有没有办法同时执行此操作以加快速度?我已经在客户端进行了设置,但如上所述,返回的数组是错误的,所以我想我会尝试在后端进行设置。Promise.all()
答:
0赞
Jeff_V
8/9/2023
#1
始终是一个异步问题。我也通过异步推送到数组来让它工作。
...
let imgSources = [];
for (const query of queryArr) {
const url = `https://www.google.com/search?site=&tbm=isch&source=hp&biw=1873&bih=990&q=${query}`;
await driver.get(url);
const img = await driver.findElement(By.className('Q4LuWd'));
const imgSrc = await img.getAttribute('src');
(async () => imgSources.push(imgSrc))();
}
...
评论
await
imgSources.push(imgSrc)