Windows10にも標準で搭載されているコマンドにcurlというコマンドがありますが、これを利用して、URLをつけて実行するとそのURLにあるwebページの中身(htmlで書かれた内容)を取得することができます。
html上で、あるデータを送信し、ほしい情報を取得する方法にPOSTメソッドというのがあります。よく問合せメッセージなどを送るwebページに利用されています。このcurlを利用してPOSTで必要なデータを送ってデータを取得することもできます。
詳しくは、curlのヘルプを参照にまた、curlについて詳しく書かれているサイトを参照にしてください。
curl --help all
とてもたくさんのオプションなどあり何でもできそうです。
しかし、Javascriptを活用しwebブラウザ上でスクリプト動作させているページは、うまく取得できません。
これは、curlが、Javascriptに対応していないからのようです。
そこで 調べると javascriptが動作するヘッドレスというwebブラウザを利用するとよい。とのこと。
さらに調べると、chromeブラウザにそのような機能があるということで調べて見ると以下の記述で使えそうです。
フルパス\chrome.exe --headless --disable-gpu --dump-dom ”URL"
取得した、html情報をファイルに入れるには、
フルパス\chrome.exe --headless --disable-gpu --dump-dom ”URL" > test.txt
のように記述すれば、保存できます。また、パイプ処理にも対応しているようで
例えば、以下のような記述も可能です。
フルパス\chrome.exe --headless --disable-gpu --dump-dom ”URL" | findstr /E "^<a href^=^"*^/a^>"
上記は、chormeで得たhtmlをfindstrコマンドに直接渡し、処理します。
注意)findstrコマンドでは、文字列長さに制限がありますので、1行が長いデータですとエラーとなります。
Windowsのコマンドだけでは、文字制限などいろいろ制約があり、バッチファイルでは、処理が難しですね。
私はこういう時、Windows対応のbusybox64.exe利用させて頂いております。(https://frippery.org/busybox/)
このサイトは、busyboxの公式サイトのソースをWindowsのAPIに移植しバイナリ化したものを提供してくれています。
当然利用には、そのサイトをよく確認して自己責任にてご利用願います。
また、Windowsでは、取得した情報を直接変数に入れるにはfor文を使用するしかないようで、
@echo off
setlocal enabledelayedexpansion
for /f "usebackq delims=" %%A in (`call ^"C:\Program Files\Google\Chrome\Application\chrome.exe^" --headless --disable-gpu --dump-dom ^"https://sites.google.com/view/beginner-prog/^"`) do (
set "DT=%%A"
echo !DT!
)
これでも、一行ごとに処理する必要があり改行を含めて変数に入れることはできませんでした。
逆に、一行ごとなら、変数へ直接入れることができますのでうまくこれを利用して処理するとよいかと思います。
chrome.exeでは、javascriptが動作するhtmlの動作後のhtmlを取得できるのですが、直接chromeのコマンドラインインターフェィス(CLI)上でPOSTメソッドを送ることはうまくいきませんでした。
私の場合は、chromeと、curlをうまく相互に利用して使うようにしました。
例えば、
1.chrome.exeでjavascriptを動かしてsid(セッションID)を取得し、
2.そのIDを利用してcurlにてPOSTでパラメータデータとsidを送信することで
3、ほしいデータが返ってくるのでそれをファイルに保存する
といった具合です