2016-04-01 18 views
0
 private void webBrowser1_DocumentCompleted(object sender, WebBrowserDocumentCompletedEventArgs e) 
    { 
     try 
     { 
      HtmlDocument doc = logger.Document; 
      HtmlElement username = doc.GetElementById("loginUsername"); 
      HtmlElement password = doc.GetElementById("loginPassword"); 
      HtmlElement submit = doc.GetElementById("loginSubmit"); 
      username.SetAttribute("value", "myusername"); 
      password.SetAttribute("value", "mypassword"); 
      submit.InvokeMember("click"); 
     } 
     catch 
     { 

     } 
    } 

こんにちは、私はウェブサイトにログオンし、テキストを読んでユーザーに表示するプログラムを作ろうとしています。上記のコードで、私はWebブラウザを自動的にこれまでのところにしました。ログイン後のページでCのWebサイトからデータを読み取る

enter image description here

私はプログラムがタイムテーブル要素をクリックします。しかし、それは独自のIDを持っていません。どうすればそれにアクセスできますか?

これは正しい方法ですか?私はここで何をしたいのですか?私は自分でそれをすることができなかったので、私はこの質問をここに置く!

答えて

1

URLを持っているので、ボタンをクリックする必要はありません。あなたは、このようなFiddlerなどのツールを使用した場合、データが返さ見ることができます

​​

:あなたは、直接URLを呼び出し、返されたコードを読むことができます。

+0

あなたのコメントをありがとうございます! :) –

+1

ようこそ。あなたに適した答えが見つかった場合は、その答えの横にあるチェックマークをクリックして、正しい答えとしてそれを受け入れることができます。 –

1

MSDNページから、あなたの選択肢は限られているようです。

あなたが試してみることができるものは、代わりにSeleniumを使用してください。これにより、アプリケーションはWebコンポーネントとやりとりし、ID、XPath、CSSセレクタを使用して消費するため、現在使用しているものよりも柔軟に対応できます。

セレンには、独自のC#ラッパーが付属しています。 Thisチュートリアルが役立ちます。

+0

ありがとうございました!私はそれをチェックします:) –

0

こちらです。ちょうどいくつかのforeachコード。

bool login = false; 
    bool nav = false; 
    bool beware = true; 

    private void webBrowser1_DocumentCompleted(object sender, WebBrowserDocumentCompletedEventArgs e) 
    { 
     try 
     { 
      HtmlDocument doc = webBrowser1.Document; 
      if (login && !nav) 
      { 
       HtmlElement timetable = null; 
       foreach (HtmlElement link in doc.GetElementsByTagName("li")) 
       { 
        Console.WriteLine(link.InnerText); 
        if (beware) 
        { 
         timetable = link; //Avoiding NullExceptions 
        } 
        if (link.InnerText.Contains("Timetablelol")) 
        { 
         timetable = link; //Set the Timetable var. 
         beware = false; //Keep Timetable the kept element. 
        } 
       } 
       timetable.InvokeMember("click"); //Clicking on timetable link. 
       nav = true; 
      } 
      if (!login && !nav) 
      { 
       HtmlElement username = doc.GetElementById("loginUsername"); 
       HtmlElement password = doc.GetElementById("loginPassword"); 
       HtmlElement submit = doc.GetElementById("loginSubmit"); 
       username.SetAttribute("value", "myusername"); 
       password.SetAttribute("value", "mypassword"); 
       submit.InvokeMember("click"); 
       login = true; 
      } 

     } 
     catch 
     { 
      Console.WriteLine("Didn't work"); 
     } 
    } 
+0

返信いただきありがとうございます!しかし、それはロードされているようには見えません。以前のリクエストがまだロードされていない可能性がありますか? –

+0

@ImOnTheCaseおそらく。私はそれをテストします。 1分。 – HKYL

+0

@ImOnTheCaseいくつか例外がありましたが、修正しました。 – HKYL

関連する問題