Sen*_*ssX 1 javascript node.js web-scraping headless-browser puppeteer
我正在尝试使用 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();
})();
Run Code Online (Sandbox Code Playgroud)
提前致谢!
AJC*_*C24 13
好的,你走在正确的轨道上,但只需要改变一些事情。
afterJS变量来自哪里?无论哪种方式,您都不需要它。username和password输入字段中输入数据,但并未要求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();
})();
Run Code Online (Sandbox Code Playgroud)
希望这能让你走上正确的道路,通过登录页面!
更新 1:
您询问了如何在 Instagram 上解析元素的文本……不幸的是,我自己没有帐户,因此无法真正为您提供确切的解决方案,但希望这仍然具有一定的价值。
所以您正在尝试评估元素文本,对吗?您可以按如下方式执行此操作:
const text = await page.$eval(cssSelector, (element) => {
return element.textContent;
});
Run Code Online (Sandbox Code Playgroud)
您所要做的就是替换cssSelector为您希望从中检索文本的元素的选择器。
更新 2:
好的,最后,您询问了向下滚动到父元素中的元素。我不会从别人那里窃取功劳,所以这里是答案:
您需要做的基本上是按照那里的说明进行操作,并使其与 puppeteer 一起使用,如下所示:
await page.evaluate(() => {
const lastLink = document.querySelectorAll('h3 > a')[2];
const topPos = lastLink.offsetTop;
const parentDiv = document.querySelector('div[class*="eo2As"]');
parentDiv.scrollTop = topPos;
});
Run Code Online (Sandbox Code Playgroud)
请记住,我尚未测试该代码 - 我只是直接按照我提供的 URL 中的答案进行操作。它应该工作!
| 归档时间: |
|
| 查看次数: |
7827 次 |
| 最近记录: |