Javascript 傀儡程序通过URL数组循环访问下一页不起作用
我试图让Puppeter在一个数组中访问多个URL,但它似乎不起作用。它永远挂着 这是一个似乎不起作用的片段。注意使用模板文本的URL。 这是完整的代码Javascript 傀儡程序通过URL数组循环访问下一页不起作用,javascript,arrays,loops,web-scraping,puppeteer,Javascript,Arrays,Loops,Web Scraping,Puppeteer,我试图让Puppeter在一个数组中访问多个URL,但它似乎不起作用。它永远挂着 这是一个似乎不起作用的片段。注意使用模板文本的URL。 这是完整的代码 当转到完成时,您将已经导航,因此等待页面;从不检测导航事件 在您的情况下,您可以在goto呼叫中添加一个,以决定等待策略 替换这个 等待页面。转到“${url}”; wait page.waitForNavigation{waitUntil:networkidle2}; 用这个 wait page.goto`${url}`,{waitUntil
当转到完成时,您将已经导航,因此等待页面;从不检测导航事件 在您的情况下,您可以在goto呼叫中添加一个,以决定等待策略 替换这个 等待页面。转到“${url}”; wait page.waitForNavigation{waitUntil:networkidle2}; 用这个 wait page.goto`${url}`,{waitUntil:networkidle2}; 最简单的例子: 请注意,我为每个URL创建了一个新页面,以避免您在这个特定网站的goto中遇到的问题 const木偶演员=需要额外演员; //启用隐藏插件和所有规避 puppeter.userequirepuppeteer-extra-plugin-steavy; 异步函数{ const browser=wait puppeter.launch{headless:false}; const page=await browser.newPage; //创建URL数组 设urlist=[]; 常量pageNumberToNumber=3;//由我插入 console.logurlist; //将URL添加到数组
对于let i=1;我感谢您,浏览器现在只是无限期地位于第一页,从未导航到下一页。您从哪里获得了您提供的url?我在代码中没有看到它。很抱歉,从模板字符串粘贴了错误的url…我更新了示例以使用您的url。让我知道它是如何运行的,现在我情绪激动:不幸的是,没有幸运的是,我的朋友。根据您最初发布的完整代码示例,it控制台记录了3个URL。第一个是第0页,没有结果。您可能有一个一次性错误。您需要修复计数器。但是,即使添加了这一点,您的完整代码示例实际上也没有像您前面提到的那样转到。我不确定您示例中的转到为什么会这样做es似乎不起作用…点击页面并收集数据是一种选择吗?否则我今晚晚些时候再看:
//create array of urls
let urlList = [];
//add urls to array
for (let i = 0; i < pageNumberToNumber; i++) {
urlList.push(
`https://www.realtor.ca/map#ZoomLevel=14&Center=43.771556%2C-79.427630&LatitudeMax=43.78395&LongitudeMax=-79.38710&LatitudeMin=43.75916&LongitudeMin=-79.46816&view=list&CurrentPage=${i}&Sort=6-D&PGeoIds=g10_dpz90869&GeoName=Willowdale%2C%20Toronto%2C%20ON&PropertyTypeGroupID=1&PropertySearchTypeId=1&TransactionTypeId=2&PriceMax=1500000&BuildingTypeId=1&Currency=CAD`
);
}
console.log(urlList);
console.log(urlList.length);
for (let i = 0; i < urlList.length; i++) {
const url = urlList[i];
await page.goto(`${url}`);
await page.waitForNavigation({ waitUntil: "networkidle2" });
}
const puppeteer = require("puppeteer-extra");
// Enable stealth plugin with all evasions
puppeteer.use(require("puppeteer-extra-plugin-stealth")());
(async () => {
const browser = await puppeteer.launch({
headless: false,
});
const page = await browser.newPage();
let url =
"https://www.realtor.ca/map#ZoomLevel=14&Center=43.771556%2C-79.427630&LatitudeMax=43.78395&LongitudeMax=-79.38710&LatitudeMin=43.75916&LongitudeMin=-79.46816&view=list&CurrentPage=1&Sort=6-D&PGeoIds=g10_dpz90869&GeoName=Willowdale%2C%20Toronto%2C%20ON&PropertyTypeGroupID=1&PropertySearchTypeId=1&TransactionTypeId=2&PriceMax=1500000&BuildingTypeId=1&Currency=CAD";
await page.goto(url);
await page.waitFor(10000);
//page.evaluate lets you use JavaScript as it was being used in the developer console on the page
const result = await page.evaluate(() => {
let data = []; // Create an empty array that will store our data
let elements = document.querySelectorAll(".cardCon"); // Select all Products
for (var element of elements) {
// Loop through each product
let price =
element.children[0].children[1].childNodes[1].children[1].childNodes[1]
.childNodes[3].innerText; // Select the price
let address =
element.children[0].children[1].childNodes[1].children[1].childNodes[1]
.childNodes[5].innerText; // Select the address
let details = element.children[0].children[1].childNodes[1].children[1].childNodes[3].innerText.replace(
/\n/g,
" "
); // Select the details
let url = element.children[0].childNodes[3].href; // Select the address
data.push({ price, details, address, url }); // Push an object with the data onto our array
}
return data; // Return our data array
});
console.log(result);
//get total page number
let totalPageNumber = await page.$eval(
"#ListViewPagination_Bottom > div > div > div > span.paginationTotalPagesNum",
(element) => element.innerText
);
console.log(totalPageNumber);
//convert total page number from string to number
let pageNumberToNumber = parseInt(totalPageNumber);
//create array of urls
let urlList = [];
//add urls to array
for (let i = 0; i < pageNumberToNumber; i++) {
urlList.push(
`https://www.realtor.ca/map#ZoomLevel=14&Center=43.771556%2C-79.427630&LatitudeMax=43.78395&LongitudeMax=-79.38710&LatitudeMin=43.75916&LongitudeMin=-79.46816&view=list&CurrentPage=${i}&Sort=6-D&PGeoIds=g10_dpz90869&GeoName=Willowdale%2C%20Toronto%2C%20ON&PropertyTypeGroupID=1&PropertySearchTypeId=1&TransactionTypeId=2&PriceMax=1500000&BuildingTypeId=1&Currency=CAD`
);
}
console.log(urlList);
console.log(urlList.length);
for (let i = 0; i < urlList.length; i++) {
const url = urlList[i];
await page.goto(`${url}`);
await page.waitForNavigation({ waitUntil: "networkidle2" });
}
})();