当我将应用程序部署到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);
}
}