木偶师 登录Instagram



我正在尝试使用Puppeteer登录Instagram,但不知何故我无法做到这一点。

你可以帮我吗?

这是我正在使用的链接:

https://www.instagram.com/accounts/login/

我尝试了不同的东西。我尝试的最后一个代码是这样的:

const puppeteer = require('puppeteer');
(async() => {
const browser = await puppeteer.launch();
const page = await browser.newPage();
await page.goto('https://www.instagram.com/accounts/login/');
await page.evaluate();
await afterJS.type('#f29d14ae75303cc', 'username');
await afterJS.type('#f13459e80cdd114', 'password');
await page.pdf({path: 'page.pdf', format: 'A4'});
await browser.close();
})();

提前感谢!

好的,你走在正确的轨道上,但只需要改变一些事情。

  • 首先,我不知道你的afterJS变量来自哪里?无论哪种方式,您都不需要它。
  • 您要求在usernamepassword输入字段中键入数据,但没有要求puppeteer实际单击登录按钮来完成登录过程。
  • page.evaluate()用于在页面上下文中(即在远程浏览器中加载的网页上(执行JavaScript代码。所以你不需要在这里使用它。

我会重构您的代码,如下所示:

const puppeteer = require('puppeteer');
(async () => {
const browser = await puppeteer.launch();
const page = await browser.newPage();
await page.goto('https://www.instagram.com/accounts/login/');
await page.waitForSelector('input[name="username"]');
await page.type('input[name="username"]', 'username');
await page.type('input[name="password"]', 'password');
await page.click('button[type="submit"]');
// Add a wait for some selector on the home page to load to ensure the next step works correctly
await page.pdf({path: 'page.pdf', format: 'A4'});
await browser.close();
})();

希望这能让您走上正确的道路,通过登录页面!

更新1:
您询问了有关在Instagram上解析元素文本的信息...不幸的是,我自己没有帐户,所以无法真正为您提供确切的解决方案,但希望这仍然证明具有一定的价值。

所以你正在尝试评估元素文本,对吧?您可以按如下方式执行此操作:

const text = await page.$eval(cssSelector, (element) => {
return element.textContent;
});

您所要做的就是将cssSelector替换为要从中检索文本的元素的选择器。

更新2:
好的 最后,您已经询问了向下滚动到父元素中的元素。我不会从别人那里窃取功劳,所以这是答案:

如何滚动到div 中的元素?

您所要做的就是基本上按照那里的说明进行操作,并使其与木偶师一起工作,如下所示:

await page.evaluate(() => {
const lastLink = document.querySelectorAll('h3 > a')[2];
const topPos = lastLink.offsetTop;
const parentDiv = document.querySelector('div[class*="eo2As"]');
parentDiv.scrollTop = topPos;      
});

请记住,我还没有测试过该代码 - 我只是直接按照我提供的 URL 中的答案进行操作。它应该有效!

您可以使用以下示例代码登录 Instagram:

const puppeteer = require('puppeteer');
(async () => {
const browser = await puppeteer.launch();
const page = await browser.newPage();
// Wait until page has loaded
await page.goto('https://www.instagram.com/accounts/login/', {
waitUntil: 'networkidle0',
});
// Wait for log in form
await Promise.all([
page.waitForSelector('[name="username"]'),
page.waitForSelector('[name="password"]'),
page.waitForSelector('[name="submit"]'),
]);
// Enter username and password
await page.type('[name="username"]', 'username');
await page.type('[name="password"]', 'password');
// Submit log in credentials and wait for navigation
await Promise.all([
page.click('[type="submit"]'),
page.waitForNavigation({
waitUntil: 'networkidle0',
}),
]);
// Download PDF
await page.pdf({
path: 'page.pdf',
format: 'A4',
});
await browser.close();
})();

最新更新