2012-02-25 8 views
0

私はGoogleのApexシステムでオンラインクラスを取っており、特定のページからデータを自動的に保存したいと考えています。通常の閲覧時にログインしてコンテンツにアクセスするプロセスは、webappを開いてログインし、表示したいコースをナビゲートし、コースをクリックします。私がやりたいコースをクリックすると、レッスンのある新しいウィンドウが開きます。これは私がプログラムではできなかった部分です。ウェブサイトのウェブページの内部テキストをプログラムで保存する

私が考えた最初のやり方は、PHPを使ってWebページをリクエストして保存することでした。問題はログインと、PHPの自動化の仕方がわからない多数のjavascriptイベントやものがあることです。私はPOSTリクエストでログインしていますが、残りの部分は把握できませんでした。

今日、私はWindows Forms、C#でdotnet WebBrowserコントロールを使用してそれを実行しようとしていました。私はそれを私のためにログインして、開かせるコースを選択する必要があるページに移動しますが、リンクをクリックすると、Internet Explorerでウェブページを開こうとします。リンクを使用すると、サイトからエラーが表示されます。

ページのリンクを確認しています。問題が発生しました。新しいウィンドウを開くjavascriptイベントが見つかりました。それはリダイレクトリンクでそれを開きます。新しいウィンドウではなく新しいタブでこのリダイレクトリンクを使用するとChromeで動作しますが、C#からリダイレクトリンクを取得する方法はわかりません。 a要素はiframeの内側にあり、そこでリンクを取得する必要があります。 How can I, in C#, retrieve an element from within an iframe?

また、これを行うより良い方法はありますか?

答えて

1

URLのhtmlを取得するためにWebClientクラスを使用してください。

例1:

string htmlTd; 

     using (WebClient client = new WebClient()) 
     { 
     //or - request.UserAgent = "Mozilla/5.0 (Windows; U; MSIE 9.0; WIndows NT 9.0; en-US)"; 
     client.Headers[HttpRequestHeader.UserAgent] = "Mozilla/5.0 (Windows; U; Windows NT 6.1; en-US; rv:1.9.2.13) Gecko/20101203 Firefox/3.6.13"; 
     htmlTd = client.DownloadString(myurl); 
     } 

     GetImagesInHTMLString(htmlTd); 

//それが原因私の修正に今故障している...のページから画像を取得... 私はそれに取り組んでいますが、あなたのターゲットを得るのを助けるしています。.. WebClientのクラスのリンクから

private void GetImagesInHTMLString(string htmlString) 
    { 

     List<string> images = new List<string>(); 
     string pattern = @"<(img)\b[^>]*>"; 

     Regex rgx = new Regex(pattern, RegexOptions.IgnoreCase); 
     MatchCollection matches = rgx.Matches(htmlString); 
     string b [email protected]"src="""; 
     string [email protected]"src="""+myurl+""; 

     //if (matches.Count >1) 
     //{ 
      for (int i = 0, l =matches.Count; i < l; i++) 
      { 


       string pattern1 [email protected]"s/\s*src='[^']*'//"; 
       // images.Add(matches[i].Value.Replace(b, c)); 
       string allmatch = matches[i].Value.Replace(b, c); 
       string patrern1="#(= src=['\"].+[^\"]?)?src=[\"']?([^\"']+)#i"; 
       Regex rgx1 = new Regex(pattern1); 
       MatchCollection matches1 = rgx1.Matches(allmatch); 
       string siya = matches1[0].Value.ToString(); 
       //string b = @"src="""; 
       //string c = @"src=""" + myurl + ""; 
      } 
     // }  

     foreach (var item in images) 
     { 
      Response.Write(item); 
     }   
    } 

例:

WebClient client = new WebClient(); 

     // Add a user agent header in case the 
     // requested URI contains a query. 

     client.Headers.Add ("user-agent", "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.2; .NET CLR 1.0.3705;)"); 

     Stream data = client.OpenRead (URl); 
     StreamReader reader = new StreamReader (data); 
     string s = reader.ReadToEnd(); 
     Console.WriteLine (s); 
     data.Close(); 
     reader.Close(); 
+0

問題は、ウェブページからHTMLを取得していない、それは得るのですサーバー上のphpセッション変数を正しく設定して、ページを表示してダウンロードできるようにします。 URLでこれを試してみたら、ログインしていないというエラーが表示されます。 – mowwwalker

関連する問題