使用Puppeteer和Node JS进行Sharepoint身份验证

时间:2018-09-11 06:25:14

标签: node.js authentication sharepoint puppeteer

我无法找到一种验证用户身份的方法。 当您手动启动Node JS Server时,此方法工作正常(是的,它的代码很丑):

 if (data.URL.includes("https://share.url.com")) {
        await page.type('#userNameInput', 'user');
        await page.type('#passwordInput', 'pass');
        await page.click('#submitButton');

        await page.waitForNavigation({waitUntil: 'load'});
        await page.waitFor(6000);
    }

Sharepoint不知道我的用户数据,因此他们将我导航到登录页面,我可以在其中填写登录信息,然后移至我所请求的站点。但是与此同时,做了2处更改:1.此登录页面不再存在,如果找不到登录信息,我将被链接到一个页面,上面写着“对不起,您无权访问此页面”。第二个问题或更改是节点服务器由服务启动。

最后,我只需要以某种方式访问​​该页面,然后对其进行截图。但是认证让我很麻烦。我现在需要解决此问题的方法,但是我无法考虑其他解决方案。

木偶身份验证:

await page.authenticate({
    username: "user", 
    password: "pass"
});

这不起作用,或者与auth标头一起使用也不起作用。

保存用户信誉。在浏览器中(chrom(ium)):

我试图保存用户信誉。用于浏览器中的页面,但这没有任何影响。

URL身份验证:

我试图在(https://user:pass@share.url.com/bla/site.aspx)之类的URL内进行身份验证,但是它不起作用。

我不知道该如何解决此问题,您是否有建议我可以以其他方式尝试此问题,或者您是否在我的代码或思想中看到错误?

感谢比尔·盖茨

2 个答案:

答案 0 :(得分:2)

关于

  

保存用户信誉。在浏览器中(chrom(ium)):

我也遇到过类似的情况-登录后我想从facebook截屏。要实现此目的,我做了以下步骤:

1)创建临时用户数据目录

mkdir /tmp/puppeteer_test

2)使用这些参数运行Chrome

/usr/bin/google-chrome --user-data-dir=/tmp/puppeteer_test --password-store=basic

3)转到facebook.com,登录,然后关闭浏览器

4)使用适当的参数运行puppeteer:

const browser = await puppeteer.launch({
  headless: false,
  executablePath: '/usr/bin/google-chrome',
  args: ['--user-data-dir=/tmp/puppeteer_test']
});
const page = await browser.newPage();
await page.goto('https://facebook.com', { waitUntil: 'networkidle2' });
await page.screenshot({path: 'facebook.png'});
await browser.close();

答案 1 :(得分:1)

我正在为SharePoint做以下事情

const browser = await puppeteer.launch();
const page = await browser.newPage();

await page.setViewport({width: 1920, height: 1080});

// Open SharePoint page
console.log("Opening page");
await page.goto('https://mytenant.sharepoint.com/sites/mysite');
await page.waitForNavigation({ waitUntil: 'networkidle0' });
console.log("Page opened");

// Input username
console.log("Inputting username");
await page.type('#i0116', 'user@mytenant.com');
await page.click('#idSIButton9');
await page.waitForNavigation({ waitUntil: 'networkidle0' });
console.log("Username input completed");

// Input password
console.log("Inputting password");
await page.type('#i0118', 'password123');
await page.click('#idSIButton9');
await page.waitForNavigation({ waitUntil: 'networkidle0' });
console.log("Password input completed");

// Stay signed in
console.log("staying signed in");
await page.keyboard.press('Enter');
await page.waitForNavigation({ waitUntil: 'networkidle0' });
console.log("staying signed in completed");

// Wait, because rendering is picky
await page.waitFor(6000);