C#で自動ログインし、作業させるプログラムを組んでいます。

しかし、セッションが保持されないのかログイン後Webbrowser.Navigateで別ページに飛ぶと、「ログインしてください」と出てログイン状態が保持されません。
ページ内のリンクをクリックして別ページに飛ぶと正常に動きます。(webbrowser.document.all.getelementbytagname.InvokeMember("click")等で)

これをどうにかWebbrowser.Navigateで正常に動かす方法はないでしょうか?
よろしくお願いします。

回答の条件
  • 1人5回まで
  • 登録:
  • 終了:2011/06/27 17:10:03
※ 有料アンケート・ポイント付き質問機能は2023年2月28日に終了しました。

回答4件)

id:todo36 No.1

回答回数34ベストアンサー獲得回数5

ポイント50pt

IEでログインして、URLを直接打つとどうなりますか?

それでログインが切れるなら REFERER をチェックしていることが考えられます。

> ページ内のリンクをクリックして別ページに飛ぶと正常に動きます。

C#側でページにリンクを追加してクリックする。

Webbrowser.Navigate("javascript:var a=document.createElement('a');a.href="hoge.html";document.body.appendChild(a);a.click();")

id:f-shin No.2

回答回数15ベストアンサー獲得回数2

ポイント50pt

的外れだったら申し訳ないのですが、WebBrowserコントロールはcookieを自動でハンドリングしてくれるのでしょうか?次回リクエスト時にセッション変数を持ち回すためのクッキーを送信しないとセッションは維持されませんが、その辺は自動でハンドリングされるものなのでしょうか?

もしくは、Webサイト側の画面遷移がPOSTで動いているということはないでしょうか?asp.netのpostbackなどを使っていて、GETリクエストではサイトの側が動かないなどはないでしょうか?(多分、navigateメソッドはGETリクエストを発行すると思います)

古い知識で回答してしまったので、的外れだったらごめんなさい。あえて一般論としては、まずは何よりコントロールの問題か、Webサイトのアーキテクチャの問題かを切り分けるということになると思います。

id:happybirth No.3

回答回数1ベストアンサー獲得回数0

ポイント50pt

ログイン状態が保持できないのは、まずクッキーが送られてないことを疑うべきです。

Navigateの4番目の引数で、リクエストヘッダーを指定できるようなので、

明示的にクッキーを送ればいいのではないでしょうか。

こんな感じですかね。

webrowser.Navigate(url, null, null, "Cookie: " +webbrowser.document.cookie + "\r\n")

  • id:after_333sec
    >todo36さん
    URLを直接入力しても問題なく動きます。
    またそのコードを試してみましたが動きませんでした。(ログインが切れます)

    >えふしんさん
    自動でハンドリングするか調べましたがはっきりとした答えはありませんでした・・・
    またPOSTかGETかについてですが、ソースを見たところ<A href="~"></A>となっており、どちらも関係ないようです。

    引き続き解決策がありましたらお願いします。
  • id:todo36
    IEでURLを打つのと、Webbrowser.Navigateとで何が違うのか?
    HTTPヘッダを解析してみるとか。

    横取り丸/Inetspy(フリーウエア)がお勧め。
  • id:after_333sec
    横取り丸を試しましたが、ログインからのもの全て取得することができませんでした。
    (他のサイトは取得できています)

この質問への反応(ブックマークコメント)

「あの人に答えてほしい」「この質問はあの人が答えられそう」というときに、回答リクエストを送ってみてましょう。

これ以上回答リクエストを送信することはできません。制限について

回答リクエストを送信したユーザーはいません