DOBON.NET DOBON.NETプログラミング掲示板過去ログ

Webbrowserの自動化 jspのページ

環境/言語:[OS : Windows XP Professional / 言語 : Visual Basic .NET / .NET Framework : 2.0]
分類:[.NET]

【解決したい問題】

HtmlElement等を使用してWebbrowserの自動化を行っています。
今回、https://xxx.xxx/index.jspで終わるページで試したところ
作成したソースが全て素通りしてしまい困っています。

行おうとしたことは、ページを表示してボタンをクリックする事です。

【解決するために何をしたか】

過去ログ http://dobon.net/vb/bbs/log3-25/15353.html 等に
あるとおり、INPUT→TYPE→Value→Buttonという条件分岐で
Yahoo等、他のページでは問題なく動作していました。

しかし、上記のページだけInputのCountが0となりソースが
素通りしてしまいます。使ったソースは上記のURLの通りです。

jspですので、javaが動的にHTMLを生成しているとかが原因?
と思っておりますが、どなたかやり方をご存知の方、何卒御教授下さい。
jsp かどうかはあんまり重要じゃないですね。
向こうで何しようが、結局ブラウザが受け取るのは作成済みの html ですから。
// Ajax ばりばりのすごい動的ページでは難しいかも知れませんけど。

取りあえず、WebBrowser.DocumentText などを使って、取得した html を眺めてみたらどうでしょうか。
まるまる frame なページになっていたとかかも知れませんよ?
御回答有難う御座います。
> jsp かどうかはあんまり重要じゃないですね。

こちらは安心致しました。> 取りあえず、WebBrowser.DocumentText などを使って、取得した html を眺めてみたらどうでしょうか。
> まるまる frame なページになっていたとかかも知れませんよ?
うっ。げほっげほっ。
ご指摘のとおり、frameset とframeタグが入った数行しか読み込まれて
おりませんでした。

読み込まれたHTMLは下記の通りです。Frameの中身を読み込むには
どうしたら良いでしょうか・・・。適当なページが検索でヒットしません。

<HTML>
<HEAD>
<TITLE>X|[c{</TITLE>
<META HTTP-EQUIV="Pragma" CONTENT="no_cache">
<META HTTP-EQUIV="Cache-Control" CONTENT="no_cache">
<META HTTP-EQUIV="Content-Type" CONTENT="text/html;charset=Shift_JIS">


<SCRIPT TYPE="text/javascript" SRC="j.js">
</SCRIPT>

<SCRIPT TYPE="text/javascript">


var mi;

tid=10;


timer1=120000;


timer2=15000;

timer=900000;



function ct(){
    var flg = "81";
    if (flg == "71"){
        st();
        to();
        ex_nd();
        et='0';
    }else if (flg == "81"){
        st();
        ti();
    }
}

function st(){
    clearTimeout(tid);
    clearTimeout(tid);
    clearTimeout(tid);
}




function ex_db(){
    if (document.all) {
        obj = BD.document.all('ex');
    }
    else if(document.getElementById) {
        obj = BD.document.getElementById('ex');
    }

    if (obj != null && obj.style.display == "none") {
        BD.db('ex');
        if (BD.location.href.indexOf("a.jsp") != -1) {
            BD.ex.focus();
        }
    }
}
function ex_nd(){
    if (document.all) {
        obj = BD.document.all('ex');
    }
    else if(document.getElementById) {
        obj = BD.document.getElementById('ex');
    }

    if (obj != null && obj.style.display == "block") {
        BD.nd('ex');
    }
}






function ti(){
    tid = setTimeout('close()',timer);
}





function close(){
    if(mi != null){
        BD.location.href = 'm.jsp?id=' + mi + '';
    }else{
        BD.location.href = 'm.jsp';
    }
}


var bk='0';
var et = "0";        /*    MCOPYImF            */
var tf = "0";        /*    ?pFLG        */


var agent_flg = true;

function check_user(){
    if (!user()) {
        agent_flg = false;
        BD.location.href = 'error.jsp';
    }
}


function unload(){
    if (agent_flg) {
        close();
    }
}

</SCRIPT>


<SCRIPT FOR="window" EVENT="onunload" LANGUAGE="javascript">

    if (agent_flg) {
        close();
    }
</SCRIPT>



</HEAD>

<frameset frameborder="no" border="0" framespacing="0" onLoad="check_user();scroll()" onUnload="unload()">
    <frame src="m.jsp?pdate=20061207034313" name="BD" frameborder="0" marginwidth="0" marginheight="0">
</frameset>



</HTML>
.NET 2.0 のブラウザコントロールで使用するクラスは、おおよそ
WebBrowser
HtmlDocument
HtmlWindow
HtmlElement
と言った辺りくらいです。
まずはこれらのメンバをヘルプで調べてみて下さい。
再度御教授有難う御座います。
結果として下記のメソッドを使用して無事動作させる事が出来ました。
コレで大抵の事はできそうです。
> HtmlWindow

また、参考としたURLは下記の通りです。
http://q.hatena.ne.jp/1146683800
http://dobon.net/vb/bbs/log3-25/15353.html

また、次の方の為に参考ソースを記入します。
Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
        Me.WebBrowser1.Navigate("https://aaa.aaa/index.jsp")
End Sub

Private Sub WebBrowser1_DocumentCompleted(ByVal sender As System.Object, ByVal e As System.Windows.Forms.WebBrowserDocumentCompletedEventArgs) _
    Handles WebBrowser1.DocumentCompleted
        Dim Frames As HtmlWindow
        Dim Elements As HtmlElement

        For Each Frames In Me.WebBrowser1.Document.Window.Frames
            For Each Elements In Frames.Document.GetElementsByTagName("INPUT")
                If Elements.GetAttribute("TYPE") = "button" Then
                    If Elements.GetAttribute("VALUE") = "Test" Then
                        Elements.InvokeMember("CLICK")
                    End If
                End If

            Next

        Next
End Sub
解決済み!

DOBON.NET | プログラミング道 | プログラミング掲示板