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

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

新規登録して質問してみよう
ただいま回答率
85.48%
スクレイピング

スクレイピングとは、公開されているWebサイトからページ内の情報を抽出する技術です。

Google Apps Script

Google Apps ScriptはGoogleの製品と第三者のサービスでタスクを自動化するためのJavaScriptのクラウドのスクリプト言語です。

Q&A

1回答

1358閲覧

【GAS】スクレイピング Yahoo!プロモーション広告(YSS・YDN)

anakama

総合スコア15

スクレイピング

スクレイピングとは、公開されているWebサイトからページ内の情報を抽出する技術です。

Google Apps Script

Google Apps ScriptはGoogleの製品と第三者のサービスでタスクを自動化するためのJavaScriptのクラウドのスクリプト言語です。

0グッド

0クリップ

投稿2019/06/22 12:57

編集2019/06/22 13:00

Yahoo!プロモーション広告(YSS・YDN)の管理画面に、GASを使ってログインしようと試みているのですが、
ログインページから先のページに遷移することができない状態です。

過去の、こちらのサイトの投稿(https://teratail.com/questions/157194)から、
Rubyでのログイン方法が掲載されていたのですが、GASに応用することができず困っております。。

下記のコードでは、ログインページ遷移後に、
レポートのダウンロードリンクからcsvファイルをスプレッドシートに転記するものとなりますが、
ひとまずログインをしたいと考えております。

function scriping() { // ログインページ var LOGIN_URL1 = "https://login.bizmanager.yahoo.co.jp/login" var LOGIN_URL2 = "https://login.bizmanager.yahoo.co.jp/login.php"; //post投げるURL // CSVファイルダウンロード先のリンク var CSV_DOWNLOAD_URL = "******"; // ログインID var id = "AAAAAAA"; // パスワード var password = "aaaaaaa"; var options = { method : "post", followRedirects: true, payload : { user_name: id, password: password } };  // ログインフォームを踏む(crumb対策のため)  UrlFetchApp.fetch(LOGIN_URL1); // ログイン(post投げる) var response = UrlFetchApp.fetch(LOGIN_URL2, options); var headers = response.getAllHeaders(); var cookies = []; if ( typeof headers['Set-Cookie'] !== 'undefined' ) { var cookies = typeof headers['Set-Cookie'] == 'string' ? [ headers['Set-Cookie'] ] : headers['Set-Cookie']; for (var i = 0; i < cookies.length; i++) { cookies[i] = cookies[i].split( ';' )[0]; }; } var options2 = { method : "get", followRedirects: false, headers : { Cookie: cookies.join(';') } }; // CSVファイル取得 response = UrlFetchApp.fetch(CSV_DOWNLOAD_URL, options2); var data = response.getContentText("UTF-8"); // スプレッドシートへの書き込み var spreadsheetObj = SpreadsheetApp.getActiveSpreadsheet(); var sheet = spreadsheetObj.getSheetByName("csv"); var csv = Utilities.parseCsv(data); sheet.getRange(1, 1, csv.length, csv[0].length).setValues(csv); }  //このコードだと上手くいかず、スプレッドシートにはログインフォームのhtmlソースが転記されてしまう。。。

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

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

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

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

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

guest

回答1

0

これほど丁寧に書かれてるベストアンサーなのですから、ちゃんと意味を読み取ってください。

.crumb の valueは、一度関連する Yahoo! のページを閲覧するなどして Cookie を持っている場合は何らかの値が埋め込まれ、逆に Cookie を持っていないユーザでは空欄になるように見えます。

ここではっきりクッキーを持つ必要性が語られます。最後にもう一度、適切なクッキーを保持すべきと書かれてます。
クッキーを保存してセットしてください。
単に開いたらいいというのは、クッキーを保持させるという課題に対する、mechanizeで実行する場合の解決策です。

javaacript

1 // ログインフォームを踏む(crumb対策のため) 2 UrlFetchApp.fetch(LOGIN_URL1);

ページを開いただけでクッキーのことなんか何もしてないですね。対策になってません

投稿2019/06/22 13:37

papinianus

総合スコア12705

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

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

anakama

2019/06/23 05:18

指摘ありがとうございます! cookieを保持して、ログインページでcrumbを取得することはできたのですが、、 2度目のログインページでpostして、fromデータを渡すときに、 crumbの値がログインページを叩く度に変わってしまいログインできずです。 gasではブラウザ操作できないのはわかっていますが、 postするためにログインページを再度叩かずに、crumbを取得してブラウザ操作でログインするしかないのでしょうか??
papinianus

2019/06/23 22:44

その状態のコードに質問を編集してください。 推測で回答するとcookieとcrumを二回目のときに渡してないからではないかと思います
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問