2017年11月 / 10月≪ 123456789101112131415161718192021222324252627282930≫12月

インフォメーション

FC2ブログで画像等を一括アップロードするソフトを地味に配布してます。
FC2ブログ用ファイルアップロードの最新版はこちら
(ベクター)FC2ブログ用ファイルアップロード

--.--.-- (--)

スポンサーサイト

上記の広告は1ヶ月以上更新のないブログに表示されています。
新しい記事を書く事で広告が消せます。


 |  --:--  |  スポンサー広告  |  Top↑

2009.08.01 (Sat)

WebBrowser

サイトを巡回して自動でクリックしたいなんてときに便利なWebBrowser。
主な使い方

// URLを開く
webBrowser1.Navigate("http://www.google.co.jp/");

// 更新
webBrowser1.Refresh();

// 読み込み完了まで待つ
try
{
while (webBrowser1.IsBusy || webBrowser1.ReadyState != WebBrowserReadyState.Complete)
{
System.Threading.Thread.Sleep((int)(0.5 * 1000));
Application.DoEvents();
}
}
catch (Exception) { }


Googleを開いて検索ボックスに「相模原」をいれて検索する処理だとこんな感じ

private void button1_Click(object sender, EventArgs e)
{
// URL(Google)を開く
webBrowser1.Navigate("http://www.google.co.jp/");

// 読み込み完了まで待つ
try
{
while (webBrowser1.IsBusy || webBrowser1.ReadyState != WebBrowserReadyState.Complete)
{
System.Threading.Thread.Sleep((int)(0.5 * 1000));
Application.DoEvents();
}
}
catch (Exception) { }

// DocumentはHtmlDocumentというオブジェクト型
HtmlDocument doc = webBrowser1.Document;

// 検索(テキスト)ボックス(name="q")を取得
// Document以下のエレメントはHtmlElementというオブジェクト型
HtmlElement elem = webBrowser1.Document.All["q"];

// GetElementByIdで検索ボックスを取得する場合
HtmlElement ielem = webBrowser1.Document.GetElementById("q");

// GetElementsByNameで検索ボックスを取得する場合、
// HtmlElementCollection型になる。
// ※GetElementsByNameはAll以下に存在する
HtmlElementCollection elems = webBrowser1.Document.All.GetElementsByName("q");
// コレクション型なので先頭を取得
HtmlElement celem = elems[0];

// elemもielemもcelemも同じエレメントが取得できてる はず。

// 取得した検索ボックスに「相模原」をセット
// エレメントのプロパティにセットする場合はSetAttributeを使用
elem.SetAttribute("value", "相模原");

// プロパティを取得する際はGetAttributeを使用
MessageBox.Show("title=" + elem.GetAttribute("title"));

// ラジオボタン「日本語のページを検索」(name="lr"の2個目)にチェックを入れる
webBrowser1.Document.All.GetElementsByName("lr")[1].SetAttribute("checked", "true");

// 「Google 検索」ボタンを探す
foreach (HtmlElement el in webBrowser1.Document.All)
{
// typeとvalueプロパティを取得してみる
string type = el.GetAttribute("type");
string value = el.GetAttribute("value");

// 両方取得できた場合
if (type != null && !type.Equals(string.Empty)
&& value != null && !value.Equals(string.Empty))
{
// typeが「submit」でvalueが「Google 検索」であればクリック
if (type.Equals("submit") && value.Equals("Google 検索"))
{
// メソッドを実行する場合はInvokeMemberでメソッド名を指定
el.InvokeMember("click");
// 抜ける
break;
}
}
}
}



ステータスバーを設置して、普通のIEのように現在のステータス文字をステータスバーに表示させる場合、
ステータスバーにラベル項目を追加してStatusTextChangedイベントで変化させる。
// コンストラクタ
public Form1()
{
InitializeComponent();

// webbrowserのステータスが変化した時のイベント追加
webBrowser1.StatusTextChanged += new EventHandler(webBrowser1_StatusTextChanged);
}

void webBrowser1_StatusTextChanged(object sender, EventArgs e)
{
// ステータスバーのラベルに現在のステータスを表示
toolStripStatusLabel1.Text = webBrowser1.StatusText;
}


フレームの場合は
webBrowser1.Document.Window.Frames[0].Document;
webBrowser1.Document.Window.Frames[1].Document;
等で各フレームのドキュメントが取得できるようだ。

クッキーは
webBrowser1.Document.Cookie
に入ってるみたいだがこれといった使い方がわからない。
スポンサーサイト


 |  17:02  |  C#.NET  |  トラックバック(0)  |  コメント(10)  |  Top↑
 | BLOGTOP | 
上記広告は1ヶ月以上更新のないブログに表示されています。新しい記事を書くことで広告を消せます。