部署到heroku时出现人偶问题

时间:2020-11-11 12:03:27

标签: javascript heroku web-scraping puppeteer

当我将应用程序部署到Heroku时,我的机器人正在运行时出现超时问题,该如何解决?

我从客户端页面获取数据,然后发送到服务器 下面是客户页面

maxit

下面是我的路线

< script >

  function runUnfollow() {
    alert('Unfollower is working');
    const instaLogin = document.querySelector('.instaUser').value;
    const instaPassword = document.querySelector('.instaPwd').value;
    const unfollowCount = document.querySelector('.unfollowCount').value;
    fetch('https://inzzbuild.herokuapp.com/unfollow', {
      method: 'POST',
      headers: {
        'Content-Type': 'application/json',
      },
      body: JSON.stringify({
        instaLogin,
        instaPassword,
        unfollowCount
      })
    });
  }




  </script>

然后服务器将数据传递给抓取器

router.post('/unfollow', ensureAuthenticated, async(req, res) => {
  console.log(req.body);
  const botUnfollow = await scraper.unfollow(req.body.instaLogin, req.body.instaPassword, req.body.unfollowCount);
  res.json(botUnfollow);
});

在localhost上一切正常,但在bot打开页面的heroku上,服务器崩溃了,并且出现此错误H12超时 下面的错误

async function unfollow(username, password, count) {
  try {

    const browser = await puppeteer.launch({
      headless: true,
      args: [
        "--no-sandbox",
        "--disable-setuid-sandbox",
        '--disable-dev-shm-usage',
        '--single-process'
      ]

    });
    const page = await browser.newPage();
    const navigationPromise = page.waitForNavigation({
      waitUntil: "domcontentloaded"
    });
    await page.goto('https://www.instagram.com/');
    await navigationPromise;
    console.log('instagram page openss');
    await page.waitForTimeout(2000);
    await page.waitForXPath('/html/body/div[2]/div/div/div/div[2]/button[1]');

    const [gdpr] = await page.$x('/html/body/div[2]/div/div/div/div[2]/button[1]');
    await gdpr.click();


    await page.type('input[name = "username"]', username, {
      delay: 50
    });
    await page.type('input[name = "password"]', password, {
      delay: 50
    });

    const [loginButton] = await page.$x('//*[@id="loginForm"]/div/div[3]/button')
    await page.waitForTimeout(3000);
    await loginButton.click();
    console.log('login success');
    await page.waitForTimeout(3000);
    await page.goto(`https://www.instagram.com/${username}`);
    await navigationPromise;
    console.log('now in profile page');

    console.log('bot getting following list');



    for (let i = 0; i < count; i++) {
      await page.waitForXPath('//*[@id="react-root"]/section/main/div/header/section/ul/li[3]/a');
      const [followings] = await page.$x('//*[@id="react-root"]/section/main/div/header/section/ul/li[3]/a');
      await followings.click();
      await page.waitForTimeout(4000);
      await page.waitForXPath('/html/body/div[5]/div/div/div[2]/ul/div/li[1]/div/div[3]/button');
      const [btnUnfollow] = await page.$x('/html/body/div[5]/div/div/div[2]/ul/div/li[1]/div/div[3]/button');
      btnUnfollow.click();

      await page.waitForXPath('/html/body/div[6]/div/div/div/div[3]/button[1]');
      const [delFollow] = await page.$x('/html/body/div[6]/div/div/div/div[3]/button[1]');
      await delFollow.click();
      console.log(`Removed user: ${i + 1}`);
      await page.waitForTimeout(60000);
      await page.reload();
    }

    browser.close();
    console.log('unfollower finished');


  } catch (err) {
    console.log(err);
  }
}

0 个答案:

没有答案
相关问题