使用 Puppeteer 从 Google 地图搜索结果 link 中选择标题和地址
Selecting title and address from Google maps search result link using Puppeteer
我想从 google 地图列表中控制台记录“商店名称”和“商店地址”。我在 google 地图上搜索了“芝加哥花店”,然后点击了其中一个 link。然后,我试着控制台登录了店名和地址。我很难使用 querySelector(css 选择器)来控制台记录我需要的内容。另外,当我复制并粘贴 long Google Maps link for a shop (https://www.google.com/maps/place/Donna's+Garden+Flower+Shop+-+Chicago,+IL/@41.9898102,-87.7360212,17z/data=!3m1!4b1!4m5!3m4!1s0x880fce639267ed2f:0x3e47d8ddf3040316!8m2!3d41.9898313!4d-87.7338812?authuser=0&hl=en) 时,它会出错,但它可以在浏览器上运行。如果我缩短它不会报错。
如果你能检查我的代码,我会很高兴。谢谢
const puppeteer = require('puppeteer');
(async () => {
const browser = await puppeteer.launch({ headless: false });
const page = await browser.newPage();
await page.goto('https://www.google.com/maps/place/Donna's+Garden+Flower+Shop+-+Chicago,+IL/@41.9898102,-87.7360212,17z/data=!3m1!4b1!4m5!3m4!1s0x880fce639267ed2f:0x3e47d8ddf3040316!8m2!3d41.9898313!4d-87.7338812?authuser=0&hl=en');
//await page.screenshot({ path: 'example.png' });
const shopName = await page.$eval("x3AX1-LfntMc-header-title-title span", span => span.textContent);
console.log(shopName);
//await browser.close();
})();
如果 URL 包含单引号 '
您需要使用双引号 "
或反引号 `
。
选择器中 class 名称前需要一个点。
你的情况好像还需要等元素出现才行
这似乎有效:
const puppeteer = require('puppeteer');
(async () => {
const browser = await puppeteer.launch({ headless: false });
const page = await browser.newPage();
await page.goto("https://www.google.com/maps/place/Donna's+Garden+Flower+Shop+-+Chicago,+IL/@41.9898102,-87.7360212,17z/data=!3m1!4b1!4m5!3m4!1s0x880fce639267ed2f:0x3e47d8ddf3040316!8m2!3d41.9898313!4d-87.7338812?authuser=0&hl=en");
//await page.screenshot({ path: 'example.png' });
await page.waitForSelector(".x3AX1-LfntMc-header-title-title span");
const shopName = await page.$eval(".x3AX1-LfntMc-header-title-title span", span => span.textContent);
console.log(shopName);
//await browser.close();
})();
我想从 google 地图列表中控制台记录“商店名称”和“商店地址”。我在 google 地图上搜索了“芝加哥花店”,然后点击了其中一个 link。然后,我试着控制台登录了店名和地址。我很难使用 querySelector(css 选择器)来控制台记录我需要的内容。另外,当我复制并粘贴 long Google Maps link for a shop (https://www.google.com/maps/place/Donna's+Garden+Flower+Shop+-+Chicago,+IL/@41.9898102,-87.7360212,17z/data=!3m1!4b1!4m5!3m4!1s0x880fce639267ed2f:0x3e47d8ddf3040316!8m2!3d41.9898313!4d-87.7338812?authuser=0&hl=en) 时,它会出错,但它可以在浏览器上运行。如果我缩短它不会报错。
如果你能检查我的代码,我会很高兴。谢谢
const puppeteer = require('puppeteer');
(async () => {
const browser = await puppeteer.launch({ headless: false });
const page = await browser.newPage();
await page.goto('https://www.google.com/maps/place/Donna's+Garden+Flower+Shop+-+Chicago,+IL/@41.9898102,-87.7360212,17z/data=!3m1!4b1!4m5!3m4!1s0x880fce639267ed2f:0x3e47d8ddf3040316!8m2!3d41.9898313!4d-87.7338812?authuser=0&hl=en');
//await page.screenshot({ path: 'example.png' });
const shopName = await page.$eval("x3AX1-LfntMc-header-title-title span", span => span.textContent);
console.log(shopName);
//await browser.close();
})();
如果 URL 包含单引号
'
您需要使用双引号"
或反引号`
。选择器中 class 名称前需要一个点。
你的情况好像还需要等元素出现才行
这似乎有效:
const puppeteer = require('puppeteer');
(async () => {
const browser = await puppeteer.launch({ headless: false });
const page = await browser.newPage();
await page.goto("https://www.google.com/maps/place/Donna's+Garden+Flower+Shop+-+Chicago,+IL/@41.9898102,-87.7360212,17z/data=!3m1!4b1!4m5!3m4!1s0x880fce639267ed2f:0x3e47d8ddf3040316!8m2!3d41.9898313!4d-87.7338812?authuser=0&hl=en");
//await page.screenshot({ path: 'example.png' });
await page.waitForSelector(".x3AX1-LfntMc-header-title-title span");
const shopName = await page.$eval(".x3AX1-LfntMc-header-title-title span", span => span.textContent);
console.log(shopName);
//await browser.close();
})();