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

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

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

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

RPA

RPA(Robotic Process Automation)は、ホワイトカラーの間接業務を人間に代行して自動的に行う技術や概念を指します。人間が繰り返すクリックやキーボード入力といった定型的なデスクワークを行うことから、仮想知的労働者(Digital Labor)と呼ばれることがあります。

Google Apps Script

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

HTML

HTMLとは、ウェブ上の文書を記述・作成するためのマークアップ言語のことです。文章の中に記述することで、文書の論理構造などを設定することができます。ハイパーリンクを設定できるハイパーテキストであり、画像・リスト・表などのデータファイルをリンクする情報に結びつけて情報を整理します。現在あるネットワーク上のほとんどのウェブページはHTMLで作成されています。

意見交換

クローズ

1回答

566閲覧

WEB上のファイルURLのないファイルのGASによるダウンロードについて

Basc

総合スコア1

スクレイピング

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

RPA

RPA(Robotic Process Automation)は、ホワイトカラーの間接業務を人間に代行して自動的に行う技術や概念を指します。人間が繰り返すクリックやキーボード入力といった定型的なデスクワークを行うことから、仮想知的労働者(Digital Labor)と呼ばれることがあります。

Google Apps Script

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

HTML

HTMLとは、ウェブ上の文書を記述・作成するためのマークアップ言語のことです。文章の中に記述することで、文書の論理構造などを設定することができます。ハイパーリンクを設定できるハイパーテキストであり、画像・リスト・表などのデータファイルをリンクする情報に結びつけて情報を整理します。現在あるネットワーク上のほとんどのウェブページはHTMLで作成されています。

0グッド

0クリップ

投稿2023/02/27 03:38

0

0

意見交換内容

・ファイル直リンクのないWEBサイトに対して、GASでWEBボタンのエミュレートをさせたいです。

・WEBボタンの動作を開発ツールで監視したところ、POST送信で特定の
ペイロードを送っているようでした。

・urlfechapp.fetchを使って、WEBボタンのエミュレートをさせようと考えていますが、
こういうサイトからファイルをダウンロードするとき皆さんはどういうやり方をしていますか?

背景、状況

・GASを使って、WEB上のファイルのダウンロード(スクレイピング、RPA的な使い方)を検討しています。

・特定のサイトでファイルのダウンロードURLがなく、WEB上のボタン押下でPOST送信され、
結果としてダウンロードされるサイトがあります。
※サイトURLについてはご容赦ください。

・GASは動的サイトは苦手と聞きますが、POST送信時にペイロードの情報をマウントすれば
ボタン押下と同じ操作ができるのではと考えていますが、皆さんのご意見いただければ幸いです。
イメージ説明
イメージ説明

・ちなみに当該WEBボタンのHTML要素は以下のような感じでした。
イメージ説明

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

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

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

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

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

回答1

#1

Basc

総合スコア1

投稿2023/03/06 00:21

結局、自分の勘違いでうまく動いていなかっただけで、単純に
①自動ログイン
②Cookie継承
③Cookie付きでDLしたいページに移動
④DLページにあるDLPOST情報をもらって
⑤DLPOST情報付けて送信
⑥BLOB情報をドライブに保存
で行けました。

もっとスマートなやり方たくさんあるんだと思いますが、とりあえず動きそうなので
OKかなと。

GAS

1function gas_login(){ 2 var login_url = "____________________"; 3 var staySecond = 3; 4 //ログイン情報(PayLoadデータ) 5 var payload_data = { 6 log:'____________________', 7 pwd:'____________________' 8 }; 9 10 //POSTデータ(POSTオプション) 11 var post_option = { 12 method: "post", 13 payload: payload_data, 14 followRedirects: false 15 }; 16 17 //レスポンス(POSTリクエスト) 18 var response = UrlFetchApp.fetch(login_url, post_option); 19 Utilities.sleep(staySecond * 1000); 20 21 //レスポンスのヘッダーからcookieを取得 22 var cookies = response.getHeaders()["Set-Cookie"]; 23 var headers = {"Cookie":cookies}; 24 var post_option2 = { 25 method: "post", 26 headers: headers, 27 payload: payload_data, 28 followRedirects: false 29 } 30 var scraping_url = "____________________"; 31 32 // ダウンロード対象ページのページ情報を要求 33 response = UrlFetchApp.fetch(scraping_url, post_option2); 34 Utilities.sleep(staySecond * 1000); 35 36 var responseHeaders = response.getAllHeaders()['Link']; 37 38 // 正規表現で数字部分を抽出 39 var regex = /\d+/g; 40 var matches = responseHeaders.match(regex); 41 42 // 配列の最後の要素が目的の数字 43 var idNumber = matches[matches.length - 1]; 44 45 // 確認用にログに出力 46 Logger.log(idNumber); 47 48 // // ログインで認証されたcookieはヘッダーで使用 49 var headers = { 50 "Cookie": cookies 51 }; 52 53 var payload_data3 = { 54 filepath: "____________________", 55 authType: "____________________", 56 post: "____________________", 57 Id: idNumber, 58 dl: "DL" 59 } 60 var post_option3 = { 61 method: "post", 62 headers: headers, 63 payload: payload_data3, 64 followRedirects: true, 65 }; 66 var scraping_url = "____________________"; 67 68 response = UrlFetchApp.fetch(scraping_url, post_option3); 69 Utilities.sleep(staySecond * 1000); 70 71 var contentResponse = response.getResponseCode(); 72 var fileBlob = response.getBlob().setName('____________________'); 73 74 DriveApp.createFile(fileBlob); 75 Logger.log(contentResponse); 76}

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

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

最新の回答から1ヶ月経過したため この意見交換はクローズされました

意見をやりとりしたい話題がある場合は質問してみましょう!

質問する

関連した質問