ログインして色々な数値をPOSTしてセッション等も維持されないと表示されないページで、尚且つSSLで、尚且つ新規ウィンドウがポップアップして表示されるページがあります。
尚そのページにはフレームが入っており、Javascriptでフレーム内がレンダリングされるようになっています。
PHP,Mysql,UWSC言語等はわかるのですが、Javascriptで処理された後の文字列はPHPなどよりブラウザ関連で処理されるものなのでJava等が向いているのかと思います。
Microsoft .NET Framework 4.5を利用してEXE形式の自作簡易ソフトで取得していた方もいたのですが、その際は簡易ブラウザ的なものを使用し、該当ページまでは手動で進み、あとはボタンを押すとそのページでレンダリングされた、フレーム内含むソースが取得出来ていました。
あまり詳しくないのですが、例文等頂ければ参考にしてトライしていきたいと思っていますので、極力そのまま使えるくらい具体的な方法を教えて頂けますと幸いです。
宜しくお願い致します。
javascript で可能だと思います。
フレームの内容が分かりませんので、仮にフレーム内にある id が data という要素の内容が変化したときに表示を行うようなスクリプトになっています。
表示されている内容を監視しているだけですのでサーバには負荷をかけません。
ブックマークレットでも Greasemonkey でも実行可能です。
(function () { // ウィンドウの右上に値を表示する function display_data(v) { var output_area = document.getElementById("output"); if (! output_area) { output_area = document.createElement("div"); output_area.id = "output"; output_area.style.padding = "1ex"; output_area.style.backgroundColor = "#eeffee"; output_area.style.border = "2px solid green"; output_area.style.position = "absolute"; output_area.style.top = 0; output_area.style.right = 0; document.documentElement.appendChild(output_area); } e.innerHTML = v; } // フレーム id="f1" の中にある id="data" のエレメントを監視する var watch_function = (function() { var before_value; return function watch_data() { var f1_frame = document.getElementById("f1"); var f1_window = f1_frame.contentWindow; var target_element = f1_window.document.getElementById("data"); var value = target_element.innerHTML; // 値が前回と異なっていた場合に処理をする if (before_value != value) { display_data(value); console.log(value); before_value = value; } } })(); // 1秒間隔で監視開始 setInterval(watch_function, 1000); })();
Selenium でブラウザ操作を自動化する、キーボードやマウスの操作をマクロとして保存できるブラウザ拡張などでは駄目なのでしょうか…?
なお、以下についての情報がなければ誰も具体的なコードは書けないと思います。
* 「とあるサイト」のURL
* スクレイプしたい対象のデータ(ページの HTML すべてなのか、特定の DOM なのかなど)
蛇足になりますが、web サイトへのログイン処理とページ遷移時のログインセッションの維持は自動化できないと思い込まれておられるように見受けられますが、そこまで含めて自動化可能です。私ならすべて自動化します。
有り難うございます。
数値はAjaxで更新されるのですが、
50ミリ秒毎などに数値を見張りたい場合、httpアクセスですとサーバに負荷をかけるためモラル的にNGだと思うのですが、下記のソフトのようにレンダリングされているテキストを見張る事はGreasemonkeyでも可能でしょうか。
http://mt-soft.sakura.ne.jp/web_dl/dev_tool/gettext/index.htm
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<script></p> <p> function getRedirectTargetPath(){</p> <p> var path = "ges.jsp?ric=JPIP4=ECI,0,0;TRUNR=ECI,0,0;EUTBAL=ECI,0,0&ServerName=&debug=false";</p> <p> return path;</p> <p> } </p> <p> </script>
<title>FX外為どっとコム</title>
</head>
<frameset cols = "100%,0%" border="0">
<frame name="f1" id="f1" src="common/check_ajax_mode.jsp" />
<frame name="f2" id="f2" src="blank.jsp" />
</frameset>
</html>
証券の口座を作らなければアクセス出来ないのでURLをお伝えしてもセッションなどが無ければアクセス出来ないのですが、こういったソースコードのサイトです。
javascript で可能だと思います。
フレームの内容が分かりませんので、仮にフレーム内にある id が data という要素の内容が変化したときに表示を行うようなスクリプトになっています。
表示されている内容を監視しているだけですのでサーバには負荷をかけません。
ブックマークレットでも Greasemonkey でも実行可能です。
(function () { // ウィンドウの右上に値を表示する function display_data(v) { var output_area = document.getElementById("output"); if (! output_area) { output_area = document.createElement("div"); output_area.id = "output"; output_area.style.padding = "1ex"; output_area.style.backgroundColor = "#eeffee"; output_area.style.border = "2px solid green"; output_area.style.position = "absolute"; output_area.style.top = 0; output_area.style.right = 0; document.documentElement.appendChild(output_area); } e.innerHTML = v; } // フレーム id="f1" の中にある id="data" のエレメントを監視する var watch_function = (function() { var before_value; return function watch_data() { var f1_frame = document.getElementById("f1"); var f1_window = f1_frame.contentWindow; var target_element = f1_window.document.getElementById("data"); var value = target_element.innerHTML; // 値が前回と異なっていた場合に処理をする if (before_value != value) { display_data(value); console.log(value); before_value = value; } } })(); // 1秒間隔で監視開始 setInterval(watch_function, 1000); })();
その後、特定の、ブラウザ以外のソフトウエアのボタンをクリックしたい形なので、Javascript以外のもので読み取る必要があるのです。
ヴィジュアルスタジオのコミュニティという無料版が出ていたので、言語を覚えながら.NETで試すのが一番早いのかなと思ったのですが、いかがでしょうか。
(ご質問ばかりで恐れ入ります)
早いかどうかは個人のスキルによるところが多いと思います。
特定の、ブラウザ以外のソフトウエアのボタンをクリックしたい
という処理を.NET系で処理する方法をご存じであれば、.NETで構わないと思います。
個人で利用するプログラムだと思いますので、好き嫌いで選ぶので十分だと思いますが。
有り難うございます。
AutBrowser系ですね。
UWSCでの要素吐き出しスクリプトも使ったのですが、フレーム内がエラーで取得できないんですよね。
おそらくJavascriptでフレーム内をレンダリングしているからだとおもうのですが、システムでフレーム内も吐き出した後を取得suru方法はあるのでしょうかね。
その後、特定の、ブラウザ以外のソフトウエアのボタンをクリックしたい形なので、Javascript以外のもので読み取る必要があるのです。
2015/02/22 11:04:18ヴィジュアルスタジオのコミュニティという無料版が出ていたので、言語を覚えながら.NETで試すのが一番早いのかなと思ったのですが、いかがでしょうか。
(ご質問ばかりで恐れ入ります)
早いかどうかは個人のスキルによるところが多いと思います。
という処理を.NET系で処理する方法をご存じであれば、.NETで構わないと思います。
2015/02/22 13:07:25個人で利用するプログラムだと思いますので、好き嫌いで選ぶので十分だと思いますが。