javascript - 如何在 puppeteer 中返回重定向链接的值?
问题描述
目标:我正在尝试完成网站 (api) 身份验证过程的第一步。为此,最后一步是在重定向后获取 url(地址栏)中的代码(这是我的猜测)。
简而言之,我已经弄清楚了如何输入用户名/密码。从那里它加载一个新页面,然后该页面加载另一个页面(我最好的猜测是它会检查以确保所有信息都是正确的),该页面在 url 中包含一个代码。
var puppeteer = require("puppeteer");
let clientInfo = require("./Client_Information.json");
(async () => {
const browser = await puppeteer.launch();
const page = await browser.newPage();
await page.goto(
`https://url-goes-here.com?response_type=code&client_id=${clientInfo.client_id}`
);
await page.screenshot({ path: "./ScreenShots/ScreenShot.png" });
// Enter username GOOD
await page.click("#user_id");
await page.keyboard.type(clientInfo.user_name);
await page.screenshot({ path: "./ScreenShots/ScreenShot1.png" });
console.log("Username has been inserted");
// Accepting Username GOOD
await page.click(".andes-button--large");
await page.screenshot({ path: "./ScreenShots/ScreenShot2.png" });
await page.keyboard.press("Accept"); //Enter Key
await page.screenshot({ path: "./ScreenShots/ScreenShot3.png" });
//Delay 1.5 Seconds
await page.waitForTimeout(1000);
// Enter Password GOOD
await page.click("#password");
await page.keyboard.type(clientInfo.password);
await page.screenshot({ path: "./ScreenShots/ScreenShot4.png" });
console.log("Password has been inserted");
// Accepting Password GOOD
await page.click("#action-complete");
await page.screenshot({ path: "./ScreenShots/ScreenShot5.png" });
await page.keyboard.press("Accept"); //Enter Key
await page.screenshot({ path: "./ScreenShots/ScreenShot6.png" });
//Delay 4 Seconds
await page.waitForNavigation();
await page.waitForTimeout(1000);
//URL Fetch GOOD
const url1 = await page.url();
console.log("Page URL : " + url1);
//Store URL
clientInfo.Step1_Url = url1;
//NOTE New Section
await page.waitForTimeout(10000);
const url2 = await page.url();
console.log("Page URL : " + url2);
await browser.close();
})();
在 //NOTE New Section 区域中,我正在等待获得实际的解析重定向,但我得到的是chrome-error://chromewebdata/与预期的 url+code。想法?
解决方案
问题在于redirect_uri。我将它设置为 localhost ,这似乎导致 puppeteer 无法检索它。将其更改为heroku后,它立即起作用。
推荐阅读
- c# - 从动态加载的控制器中无法访问静态
- laravel - Heroku中的禁止访问
- amazon-web-services - 在 aws-cdk 上的 aws-rds 上,使数据库可公开访问的设置在哪里?
- c++ - 从带有损坏的汉字的文件中读取输入
- sql - FIRST_VALUE OVER PARTITION BY ORDER BY 中的错误
- html - 当单元格具有行跨度和列跨度时,Chrome 表格出现故障
- javascript - Angular 6:无效的时间值
- c - 为什么我在编译 ANSI-C 时收到关于未定义的 vtables 引用的错误?
- regex - Watson Assistant:如何从输入字符串中删除不需要的字符
- python - 基于条件的行之间的熊猫分组