C# exercises (b) Web2 Form

Visual Studio community 2015 アカウントについて (学内専用)

  1. WebBrowser (基本)
  2. Form(自動操作)←今週
  3. HttpClient
  4. 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

ウェブブラウザ:

  • webBrowser1

 

スクリーンショット 2016-07-01 11.28.26

イベントハンドラ

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#」という文字列が自動的に入力される。

スクリーンショット 2016-07-01 12.20.27

 

button2、button3のボタンをクリックすると、検索が実行されて検索結果ページが表示される。

スクリーンショット 2016-07-01 12.20.34

button4のボタンをクリックすると、ページに含まれるすべてのリンク文字列とそのURLを表示する。

スクリーンショット 2016-07-01 12.20.47

機能追加

フォーム上textbox などを追加て、検索は「C#」に固定するではなく、textbox などの内容を利用するように機能追加する。

Leave a Reply

Your email address will not be published. Required fields are marked *

CAPTCHA


Related Post

C# exercises (d) REST & JSONC# exercises (d) REST & JSON

Visual Studio community 2015 アカウントについて (学内専用) WebBrowser (基本) Form(自動操作) HttpClient REST & JSON ←今週 RESTとは RESTとは、RESTはREpresentational State Transferの略。2000年にRoy Fielding氏が提唱した、分散システムにおいて複数のソフトウェアを連携させるのに適した設計原則の集合。また、狭義には、それをWebに適用したソフトウェアの設計様式のこと。一般には後者の意味で用いられることがほとんどである。RESTの世界では、ネットワーク上のコンテンツ(リソース)を一意なURLで表すのが基本。各リソース(URL)に対してGET,POST,PUT,DELETEでリクエストを送信しレスポンスをXMLやjsonなどで受け取る形式(レスポンスのフォーマット形式は指定されていない)。 REST APIをを作る前に先人はどのような設計をしていたのかを見てみましょう。今ではTwitterやfacebook,Github、Amazonなど大きいところではだいたいAPIを提供しているので、お手本は山ほどあります。URL設計やリクエスト・レスポンス、HTTPヘッダなどに着目して見比べてみましょう。 Twitter […]

C# exercises (6) Graphics and PaintC# exercises (6) Graphics and Paint

Graphicsオブジェクト ウインドウの内部を表示したり描き直したりする必要が生ずると、Formに「Paint」というイベントが発生し、Paintプロパティに設定されているメソッドが呼び出されるようになっています。 このPaintイベント用のメソッドは、これまでのクリック時のイベント用メソッドなどとは微妙に違いがあります。これは以下のように定義されます。 private void メソッド名 (object sender, PaintEventArgs e) {     ……ここに描画処理を書く…… } 第1引数に、イベントが発生したオブジェクトが渡されるのは同じですが、第2引数に渡されるのはSystem.Windows.Formsパッケージの「PaintEventArgs」というクラスのインスタンスです。これは、描画のためのイベント情報を管理するもので、描画に必要なオブジェクトなどもこの中にまとめられているのです。 中でも重要なのが「Graphics」というオブジェクトです。これはSystem.Drawingパッケージに用意されているクラスで、これはGDI+(Graphics Device Interfaceというグラフィック描画のための機能の強化版)を利用して画面にさまざまな描画を行うための機能を提供します。 Paintイベント フォームのプロパティをイベントに切り替えて、Paintイベントを探し、メソッド名Form1Paintを入力 […]

C# exercises (e) Open DataC# exercises (e) Open Data

オープンデータを利用したWebアプリ作成 オープンデータとは オープンデータ(Open Data)とは、特定のデータが、一切の著作権、特許などの制御メカニズムの制限なしで、全ての人が望むように利用・再掲載できるような形で入手できるべきであるというアイデアである。 オープンデータの利用 「LinkData.org」には、誰でも無償で利用でき、商用利用も可能なオープンデータが豊富にまとまっています。 都道府県別で探したり、人気ランキングやキーワードを指定しての検索もできるので、自分が興味のあるデータを探すのも簡単でしょう。 LinkDataのサイト内には、全国の「お城データ」や「道の駅データ」、「避難所データ」、「補助金まとめデータ」、「さくら名所データ」…など、意外とユニークで面白いデータがまとまっているので、うまく利用すれば楽しいWebアプリが作れそうです。 「ダウンロード」の項目下に、「その他の形式のAPIリストを表示」というリンクがあるのでクリックします。 すると、外部APIとしてデータが取得できるURLが一覧表示されます。 そこで「JSON」形式のURLをコピーして、実際にブラウザのアドレスバーに入力してみましょう! あとは、このデータをC#を使って、自分のWebアプリに組み込めば良い。 グループ課題 オープンデータを利用したWebアプリの作成 オープンデータの選択 郵便番号検索 天気予報検索 その他 オープンデータをブラウザで確認 C#を使って、オープンデータWebアプリの作成