javascript - Puppeteer 不允许我在不同的代码块中运行多个函数
问题描述
我正在制作一个自动结账机器人,我正在尝试制作检查物品是否有库存的部分,并且我想在不同的代码块中使其具有不同的功能。问题是我无法让它运行。当我将函数包装在 () 中时,只有第一个函数运行,而第二个函数什么也不做。
这是函数周围没有 () 的代码,有人知道我在做什么错吗?
const puppeteer = require ('puppeteer');
const puppeteerExtra = require('puppeteer-extra');
const pluginStealth = require('puppeteer-extra-plugin-stealth');
const rand_url = "https://www.walmart.com/ip/Cyberpunk-2077-Warner-Bros-PlayStation-4/786104378";
async function initBrowser(){
const browser = await puppeteer.launch({args: ["--incognito"],headless:false}); //Launches browser in incognito
const context = await browser.createIncognitoBrowserContext();
const page = await context.newPage(); //Ensures the new page is also incognito
await page.evaluateOnNewDocument(() => {delete navigator.__proto__.webdriver;});
await page.goto(rand_url); //goes to given link
return page;
};
async function checkstock(page){
await page.reload();
let content = await page.evaluate(() => document.body.innerHTML)
$("link[itemprop ='availability']", content).each(function(){
let out_of_stock = $(this).attr('href').toLowerCase().includes("outofstock");
if(out_of_stock){
console.log("Out of Stock");
} else{
await browser.close();
console.log("In Stock")
//await page.waitForSelector("button[class='button spin-button prod-ProductCTA--primary button--primary']", {visible: true,}); //Waits for Add to Cart Button
//await page.$eval("button[class='button spin-button prod-ProductCTA--primary button--primary']", elem => elem.click()); //Clicks Add to cart button
}
});
};
解决方案
要执行代码,请按如下方式执行,但您会得到 ReferenceError: $ is not defined。
const puppeteer = require ('puppeteer');
const puppeteerExtra = require('puppeteer-extra');
const pluginStealth = require('puppeteer-extra-plugin-stealth');
const rand_url = "https://www.walmart.com/ip/Cyberpunk-2077-Warner-Bros-PlayStation-4/786104378";
async function initBrowser(){
const browser = await puppeteer.launch({args: ["--incognito"],headless:false}); //Launches browser in incognito
const context = await browser.createIncognitoBrowserContext();
const page = await context.newPage(); //Ensures the new page is also incognito
await page.evaluateOnNewDocument(() => {delete navigator.__proto__.webdriver;});
await page.goto(rand_url); //goes to given link
return page;
};
async function checkstock(page){
await page.reload();
let content = await page.evaluate(() => document.body.innerHTML)
console.error(content);
$("link[itemprop ='availability']", content).each(async function(){
let out_of_stock = $(this).attr('href').toLowerCase().includes("outofstock");
if(out_of_stock){
console.log("Out of Stock");
} else{
await browser.close();
}
});
};
(async () => {
const page = await initBrowser()
await checkstock(page)
})()
推荐阅读
- arrays - 将元素正确放置在升序数组中
- javascript - 如何以编程方式显示 Chakra-UI Toast?
- sql - 如何在 Teradata SQL 中的多个表的 JOIN ON 语句中确定 OR 顺序并考虑 NULL 的优先级?
- python - 将 chess-svg 纹理集成到 kivy 对象中
- python - 如何检查日期列在熊猫中的特定月份?
- java - 使用正则表达式查找 C 样式注释块 (/* */) 但不是字符串内部的注释块?
- r - 来自与行名匹配的两个数据帧的数据总和
- c - 有哪些不同的方法可以使终端不回显我们使用标准库键入的内容?
- php - DomCrawler,使用 first() 或 last() 或 eq() 在特定位置选择类
- python - 自动将当前工作目录更改为我在 Visual Studio Code 中保存脚本的位置