プログラムでブラウザを操作してデータをセットしたり、データを取得したりしたいです。


例えば、hatenaに自分のIDとパスワードをセットしてログインします。次に自分の質問を一つずつ変数にセット。全ての質問をテキストにはき出す。

というものを作りたいとした時、どういった技術を使うのが簡単で良いでしょうか?Win XPで実現できるものでお願いします。私ができるのは、VBAくらいです。あと少しJS。Perl,Ruby,UWSCなど以外でお願いします。VB.netのウェブブラウザコントロール、xmlhttprequestあたりがよいのでしょうか?

あと、各HTMLの要素にアクセスするにはどうしたらよいでしょうか?

回答の条件
  • 1人2回まで
  • 登録:
  • 終了:2009/11/21 02:05:02
※ 有料アンケート・ポイント付き質問機能は2023年2月28日に終了しました。

回答4件)

id:kn1967 No.1

回答回数2915ベストアンサー獲得回数301

ポイント40pt

(1)どういった技術を使うのが簡単で良いでしょうか?


perlやRubyなどは除外という事のようですが、Webとの親和性が高く、

情報収集も容易なものを除外してしまうというのは論外だと私は思います。


それはさておき、XMLHTTPRequestについては、基礎中の基礎的なものですが、

以前の質問 http://q.hatena.ne.jp/1250623193 から3ヶ月ほどが過ぎ、

何か進展はありましたか? 進展が無いようであれば先はまだまだ遠いですし、

他に何を回答されても無理です。


(2)プログラムでブラウザを操作してデータをセットしたり、データを取得したりしたい


ブラウザを制御するための情報を収集することは非常に困難であり、また、

ブラウザが微妙にバージョンアップしただけで動かなくなったりしますので、

プログラムから直接、相手のサーバとやりとりする事を考えたほうが良いでしょう。


(3)各HTMLの要素にアクセス


DOMという仕様がありますので、まずはDOMについて学びましょう。

それと、DOMを操作するためのスクリプトの作り方についても学びましょう。

マネージ HTML DOM (Document Object Model) の使用


(4)注意事項


最近のWebサイトはプログラムからの自動攻撃を防ぐための措置を講じていたりしますので、

下手なプログラムでアクセスすると、サイトから弾き出されたりする可能性があります。

(攻撃とみなされて会員資格を失う可能性がありますし、しつこくすると、

 不正アクセス防止法にひっかかる可能性だってありますので要注意。)


逆に、アマゾンやgoogleなどのようにウェルカムな所では、

プログラムからのアクセス用にAPIと呼ばれるものを用意してくれてたりしますので、

内容を解析して直接いじるというような面倒な事を行う必要は無くなりつつあります。

id:snow_leopard No.2

回答回数294ベストアンサー獲得回数22

ブラウザ画面を加工したり、値を取得してどうこうなら、firefox+greasemonkey+javascriptでできるわけですが、

おっしゃられている程度のことなら、

wgetとshellスクリプトが簡単かと。

id:HALSPECIAL No.3

回答回数407ベストアンサー獲得回数86

ポイント40pt

>各HTMLの要素にアクセスするにはどうしたらよいでしょうか?

ということで回答してみます。


xmlhttprequestだと、そのままではHTMLのDOMにアクセスできません。

未確認ですが、htmlfileでパースさせるとできるげです。

http://d.hatena.ne.jp/mobitan/20090829/1251542456


なので無難にHTMLのDOMを使いたいのであれば、IEのコントロールを使うのがよろしいかと思います。

ログインも難なくスルーできるのではないでしょうか。


その辺は、id:ken3memoさんのHPが参考になると思います。

http://www.ken3.org/vba/

id:mattn No.4

回答回数104ベストアンサー獲得回数23

ポイント10pt

VBSというかWScriptですが...

Option Explicit
Dim xhr, n
Set xhr = CreateObject("Microsoft.XMLHTTP")
Call xhr.open("GET", "http://q.hatena.ne.jp/akaired/questionlist?mode=rss", False)
Call xhr.send()
For Each n in xhr.responseXML.selectNodes("/rss/channel/item")
	WScript.Echo(n.selectSingleNode("description").text)
Next

RSSから取得しているので、もしかしたら質問文が途中で省略されているかもしれません。また全件ではありません。実行は

C:\>wscript my-questions.vbs

とコマンドプロンプトから実行です。

ファイルに落とす方法は、VBSがお分かりという事なので省きます。

※方法によっては全件取得も難しくないかと思いますよ。

  • id:Reiaru
    > 全ての質問をテキストにはき出す。

    これさえできれば、ブラウザを立ち上げる必要は無いのですよね…?
    例えば GetHTMLW の様にそれ単体で巡回処理を行えば良いのではと思うのですが。
    (ブラウザ上から処理させるのはあまりにも非効率です)

    > というものを作りたい

    とあるので作る事が目的な様ですが、うーん。
  • id:b-wind
    > 私ができるのは、VBAくらいです。あと少しJS
    実質的にこれが必須条件のようだから、こんなんでいいんじゃないの?
    http://www.scriptbrowserk.com/sbkIntro.html
  • id:Reiaru
    ↑ ScriptBrowser、これは面白いですね。全く知りませんでした。
    私も何かちょっとした作業に使えるかもしれません。ブックマークしておきました。

    b-wind 様に → ★☆
  • id:horosco75
    > perlやRubyなどは除外という事のようですが、Webとの親和性が高く、
    > 情報収集も容易なものを除外してしまうというのは論外だと私は思います。

    え? 質問はクライアントサイドでは?

    > まずはDOMについて学びましょう

    ええ??

この質問への反応(ブックマークコメント)

「あの人に答えてほしい」「この質問はあの人が答えられそう」というときに、回答リクエストを送ってみてましょう。

これ以上回答リクエストを送信することはできません。制限について

回答リクエストを送信したユーザーはいません