Visual Studio community 2015 アカウントについて (学内専用)
- WebBrowser (基本)
- Form(自動操作)←今週
- HttpClient
- REST & JSON
WebBrowser コントロールを利用した、ブラウザをコントロールアプリケーションの作成手順を紹介します。
Googleの検索ページを利用し、ページに表示されているテキストボックスに文字列が自動的に入力、フォームのサブミットボタンのクリックができ、ページを解析し、含まれるすべてのリンク文字列とそのURLを表示するなどもできる。
このようにプログラムからWebページを操作する場合、事前にそのHTMLのソースをチェックして、操作対象となるHTML要素を明確にしておく必要がある。Googleの検索ページのソースを見ると、フォームの定義部分で次のような記述を見つけることができる。
<form action="/search" name=f >
<input name=q size=55 value="" …… >
<input name=btnG type=submit value="Google 検索" …… >
……
Googleの検索ページ内のフォーム定義部分(抜粋)
この記述から、フォーム(<form>要素)には「f」という名前(name属性)が付けられており、またテキストボックス(<input>要素)には「q」、[Google検索]ボタン(サブミット・ボタン。「type=submit」という属性が付いている<input>要素)には「btnG」という名前が付けられていることが分かる。
コントロールの配置
Visual Studioを起動し、新しいWindows Formプロジェクトを作成します。
フォーム上次のコントロールを配置してください
ボタン:
- button1
- button2
- button3
- button4
リストビュー:
- listView1
- listView1.View = View.Details;
- columnHeader1=HERF
- columnHeader2=text
ウェブブラウザ:
イベントハンドラ
Form1_Load
private void Form1_Load(object sender, EventArgs e)
{
webBrowser1.Navigate("http://www.google.co.jp");
}
button1_Click
private void button1_Click(object sender, EventArgs e)
{
HtmlElementCollection all = webBrowser1.Document.All;
HtmlElementCollection forms = all.GetElementsByName("q");
forms[0].InnerText = "c#"; // テキストボックスに「C#」を入力
}
button2_Click
private void button2_Click(object sender, EventArgs e)
{
HtmlElementCollection all = webBrowser1.Document.All;
HtmlElementCollection forms = all.GetElementsByName("f");
forms[0].InvokeMember("submit"); // フォームのサブミット
}
button3_Click
private void button3_Click(object sender, EventArgs e)
{
HtmlElementCollection all = webBrowser1.Document.All;
HtmlElementCollection forms = all.GetElementsByName("btnG");
forms[0].InvokeMember("click"); // ボタンのクリック
}
button4_Click
private void button4_Click(object sender, EventArgs e)
{
HtmlDocument doc = webBrowser1.Document;
// リンク文字列とそのURLの列挙
foreach (HtmlElement he in doc.GetElementsByTagName("A"))
{
string href = he.GetAttribute("href"); // HREF属性の値
string text = he.InnerText; // リンク文字列
if (!string.IsNullOrEmpty(href)
&& !string.IsNullOrEmpty(text))
{
text = text.Replace("\r\n", ""); // 改行文字の削除
string[] row_1 = { href, text };
listView1.Items.Add(new ListViewItem(row_1));
}
}
}
実行結果
button1クリックすると、ページに表示されているテキストボックスに「C#」という文字列が自動的に入力される。
button2、button3のボタンをクリックすると、検索が実行されて検索結果ページが表示される。
button4のボタンをクリックすると、ページに含まれるすべてのリンク文字列とそのURLを表示する。
機能追加
フォーム上textbox などを追加て、検索は「C#」に固定するではなく、textbox などの内容を利用するように機能追加する。