しかし、セッションが保持されないのかログイン後Webbrowser.Navigateで別ページに飛ぶと、「ログインしてください」と出てログイン状態が保持されません。
ページ内のリンクをクリックして別ページに飛ぶと正常に動きます。(webbrowser.document.all.getelementbytagname.InvokeMember("click")等で)
これをどうにかWebbrowser.Navigateで正常に動かす方法はないでしょうか?
よろしくお願いします。
IEでログインして、URLを直接打つとどうなりますか?
それでログインが切れるなら REFERER をチェックしていることが考えられます。
> ページ内のリンクをクリックして別ページに飛ぶと正常に動きます。
C#側でページにリンクを追加してクリックする。
Webbrowser.Navigate("javascript:var a=document.createElement('a');a.href="hoge.html";document.body.appendChild(a);a.click();")
的外れだったら申し訳ないのですが、WebBrowserコントロールはcookieを自動でハンドリングしてくれるのでしょうか?次回リクエスト時にセッション変数を持ち回すためのクッキーを送信しないとセッションは維持されませんが、その辺は自動でハンドリングされるものなのでしょうか?
もしくは、Webサイト側の画面遷移がPOSTで動いているということはないでしょうか?asp.netのpostbackなどを使っていて、GETリクエストではサイトの側が動かないなどはないでしょうか?(多分、navigateメソッドはGETリクエストを発行すると思います)
古い知識で回答してしまったので、的外れだったらごめんなさい。あえて一般論としては、まずは何よりコントロールの問題か、Webサイトのアーキテクチャの問題かを切り分けるということになると思います。
ログイン状態が保持できないのは、まずクッキーが送られてないことを疑うべきです。
Navigateの4番目の引数で、リクエストヘッダーを指定できるようなので、
明示的にクッキーを送ればいいのではないでしょうか。
こんな感じですかね。
webrowser.Navigate(url, null, null, "Cookie: " +webbrowser.document.cookie + "\r\n")
コメント(3件)
URLを直接入力しても問題なく動きます。
またそのコードを試してみましたが動きませんでした。(ログインが切れます)
>えふしんさん
自動でハンドリングするか調べましたがはっきりとした答えはありませんでした・・・
またPOSTかGETかについてですが、ソースを見たところ<A href="~"></A>となっており、どちらも関係ないようです。
引き続き解決策がありましたらお願いします。
HTTPヘッダを解析してみるとか。
横取り丸/Inetspy(フリーウエア)がお勧め。
(他のサイトは取得できています)