

お世話になります。

あまり使い勝手の良くないWebBrowserコントロールですが、これを使って、ブラウジング  
されているページのリンクだけを抽出するコードを書いています。  
再起などを使用して、ページ内にリンクがあれば、そのページに移動して  
同じようにブラウジングされているページのリンクだけを抽出する  
流れを作ろうとしています。

正規表現などを使用して、取得するまでは問題ないのですが、  
WebBrowserのDocumentTextからテキストを取得するには  
一度Navigateでページを開き、表示し終わらなければなりません。  
一ページだけならばたいした問題ではありませんが、全てのリンクされている  
ページを取得するには、ブラウジングして表示しきる時間が実にロスになってきます。  
表示をさせないで、WebBrowserのDocumentTextからテキストを取得できる方法は  
ありますでしょうか。

よろしくお願いいたします。


CC BY-SA 3.0
2016-10-28T01:47:33.887
29952
2017-10-20T06:35:58.133
9374
question
c# webview winforms
C# WebBrowserコントロールで、非表示のままテキストを取得するには？


WebBrowser コントロールで、画像読み込みをOFF にしたり、スクリプトをOFFにしたりすることができます。  
<https://social.msdn.microsoft.com/Forums/ja-
JP/6ff03e2f-c7e4-4fc7-aa93-40d404d85908/vb2005-webbrowser-?forum=vbgeneralja>  
が参考になります。  
自分は、もう少し改造してつかっていますが、要望があれば公開可能ですので公開します。


CC BY-SA 3.0
2016-10-28T02:34:54.100
29953
2016-10-28T02:34:54.100
18851
29952
answer


テキストだけならWebBrowserクラスではなく[WebClient.DownloadString](https://msdn.microsoft.com/ja-
jp/library/fhd1f0sw\(v=vs.110\).aspx)などを使ってはどうでしょうか？


CC BY-SA 3.0
2016-10-28T03:43:25.177
29957
2016-10-28T03:43:25.177
4236
29952
answer


文字コードを気にするのであれば`Microsoft.AspNet.WebApi.Client`パッケージの`HttpClient`を使用すればよいと思います。  
また「全く違うサイト」が<https://xn--
icknowag8a8de9wpc5ff2k.gamewith.jp/>を指すのであれば単に日本語URLがエンコードされたものです。


CC BY-SA 3.0
2016-10-28T05:20:22.373
29962
2016-10-28T05:20:22.373
5750
29952
answer


WebClient.DownloadString で取得する方法はいかがでしょうか。

日本語ドメインでは異なるサイトがダウンロードされてしまう問題ですが、App.config の configuration セクションに以下のような uri
セクションを追加することで正しく動作するようになるようです。(参考: [Uriクラス](https://msdn.microsoft.com/ja-
jp/library/system.uri\(v=vs.110\).aspx))

[code]

    <configuration>
      <uri>
        <idn enabled="All" />
        <iriParsing enabled="true" />
      </uri>
    </configuration>
    
[/code]

あと、 User-Agent
によって挙動を変えるサイトも多いですので、対象とするブラウザと同じものを設定しておくとよいかと思います。以下はその例となります。

[code]

    var client = new WebClient();
    client.Headers.Add("user-agent", "Mozilla / 4.0(compatible; MSIE 7.0; Windows NT 6.2; WOW64; Trident / 7.0; .NET4.0C; .NET4.0E; .NET CLR 2.0.50727; .NET CLR 3.0.30729; .NET CLR 3.5.30729; Tablet PC 2.0)");
    var download = client.DownloadString(new Uri("https://～"));
    
[/code]


CC BY-SA 3.0
2016-10-29T05:51:57.907
29977
2016-10-29T14:49:39.230
2016-10-29T14:49:39.230
14817
14817
29952
answer