質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
Node.js

Node.jsとはGoogleのV8 JavaScriptエンジンを使用しているサーバーサイドのイベント駆動型プログラムです。

JavaScript

JavaScriptは、プログラミング言語のひとつです。ネットスケープコミュニケーションズで開発されました。 開発当初はLiveScriptと呼ばれていましたが、業務提携していたサン・マイクロシステムズが開発したJavaが脚光を浴びていたことから、JavaScriptと改名されました。 動きのあるWebページを作ることを目的に開発されたもので、主要なWebブラウザのほとんどに搭載されています。

Q&A

解決済

1回答

1854閲覧

puppeteer(node.js )でO365に接続

toraoo

総合スコア21

Node.js

Node.jsとはGoogleのV8 JavaScriptエンジンを使用しているサーバーサイドのイベント駆動型プログラムです。

JavaScript

JavaScriptは、プログラミング言語のひとつです。ネットスケープコミュニケーションズで開発されました。 開発当初はLiveScriptと呼ばれていましたが、業務提携していたサン・マイクロシステムズが開発したJavaが脚光を浴びていたことから、JavaScriptと改名されました。 動きのあるWebページを作ることを目的に開発されたもので、主要なWebブラウザのほとんどに搭載されています。

0グッド

0クリップ

投稿2019/07/22 06:30

編集2019/07/23 02:03

前提・実現したいこと

初心者のため初歩的な質問ですみません。
見当違いな記載がありましたらご容赦ください。

puppeteerでOffice365にログインしたいです。

発生している問題・エラーメッセージ

アカウント入力後、遷移した画面でさらにパスワードを入力後、サインインボタンをクリックできずにいます。
エラーメッセージは表示されずにその後の処理(スクショ保存)が実行されます。

該当のソースコード

JS、Puppeteer

/////////////////////////////
const puppeteer = require('puppeteer');
require('dotenv').config();

(async () => {
const TARGET_URL = 'https://login.microsoftonline.com/common/oauth2/authorize?<省略>...';
const browser = await puppeteer.launch({headless: false});
const page = await browser.newPage();
await page.goto(TARGET_URL);

//Login 365
await page.type('input[id=i0116]', 'usera@domain.onmicrosoft.com');
await page.click('input[id=idSIButton9]');
await page.type('input[id=i0118]', '<MyPassword>');

await page.waitForNavigation();  ---- A'
await page.click('btn[id=idSIButton9]');

///////////////////////////////////////////////////
await page.screenshot({ path: 'example.png' });

//await browser.close();
})();

試したこと

クリックしたいボタンのid、nameともに試しているのですがうまくいってないです。
その後の処理で取ったスクショには該当のボタンが写っていないため、クリックもできていないのだと思うのですが、どのように対処したら実現できるのでしょうか。
遷移が足りないうちに押下しているのかと、ボタン押下前(A'のところ)にpage.waiForNavigationを複数回入れてみたのですが、変わりませんでした。

よろしくお願いいたします。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

m.ts10806

2019/07/22 07:58

もしかしてNode.jsでしょうか。 なのでしたらタグに追加しておいてください
toraoo

2019/07/22 08:13

ご指摘ありがとうございます。 タグ追加してみました。
guest

回答1

0

ベストアンサー

いろいろ(フォーカスしてクリックしたりエンターキータイプしたり‥)苦戦しましたがログインボタンをクリックする前にウェイトタイムを長く設ける事で解決できました。

ユーザーIDなど入力中にボタンがクリックされてしまうタイミングの問題に感じました。

下記の書き方が良いか何と言えませんが
工程ごとにPromise.allで括っています。
ご参考までに

await

1 console.log('✅ Office ログイン開始 '), 2 page.waitForSelector('input[id="i0116"]'), 3 console.log('✅ ID 入力準備完了 '), 4 page.type('#i0116','ユーザーID'), 5 page.waitFor(3000), //入力完了待ち 6 console.log('✅ ID入力完了') 7 ]); 8 9 await Promise.all([ 10 console.log('✅ ボタンクリック工程'), 11 page.click('#idSIButton9'), 12 console.log('✅ ボタンクリック '), 13 page.waitFor(4000), //パスワード画面待ち 14 ]);

※今後はwaitForという書き方が廃止のようなので代替え手段は追う必要がありそうです。

投稿2021/02/14 01:52

編集2021/02/14 02:08
nyanco-ro

総合スコア7

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

toraoo

2021/02/14 13:36

ご丁寧にありがとうございます、待ち時間の問題だと理解しました。 未熟な質問ですみません、大変助かります。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問