首页 > 解决方案 > 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
       }
    });
};

标签: javascriptnode.jsbotspuppeteer

解决方案


要执行代码,请按如下方式执行,但您会得到 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)
})()

推荐阅读