webブラウザに表示しているボタンを押下する方法について

31 views
Skip to first unread message

加藤敬

unread,
Apr 24, 2009, 9:18:55 AM4/24/09
to cocoa-dev-japan
お世話になっております。加藤です。

ブラウザ(クライアント側)に表示しているボタンを
押下させる方法を模索しております。

当初、Automatorを使おうと、思って試してみました。
(記録機能を使って、マウスの軌跡を記録する方法)

処が、スピードの遅さに参ってしまいました。


Automator + ( ? ) のプログラムにしようと思います。

比較的、簡単に出来そうな方法があれば、
教えて頂けませんか?

もし、ご存じなら、参考ページなども
教えて頂きたいと思います。


以上、よろしくお願いします。

narumi

unread,
Apr 27, 2009, 3:57:51 PM4/27/09
to cocoa-dev-japan
ご希望の解答はさっぱり思い浮かばないのですが。。。。
もしこういったことが高速で可能だとして、万が一を考えるとセキュリティ上非常に不味いことだと思います。
ブラウザを経由しない方法を探した方がよさげに思います。

加藤敬

unread,
Apr 27, 2009, 7:10:51 PM4/27/09
to cocoa-d...@googlegroups.com
加藤です。

やっぱり無理ですかぁ?

Win版のフリーウェアーで、「アメブロペタ自動巡回ソフト」というのがありまして、
実験的にcocoa版でも出来ないかなぁ? と、思ったしだい。

噂では、JavaScriptでできると聴いてましたが、
触った事がないので、さっぱり分からない。

それで、WebKitなどで出来るかな? と、
思って調べてもそれらしい記事はありませんでした。

やはり、迷宮入りでしょうか?

2009/04/28 4:57 narumi <j.na...@gmail.com>:

ご希望の解答はさっぱり思い浮かばないのですが。。。。
もしこういったことが高速で可能だとして、万が一を考えるとセキュリティ上非常に不味いことだと思います。
ブラウザを経由しない方法を探した方がよさげに思います。



大坂博幸

unread,
Apr 27, 2009, 7:57:58 PM4/27/09
to cocoa-d...@googlegroups.com
大坂です。

2009/04/28 8:10 加藤敬 <tao....@gmail.com>:

加藤です。

やっぱり無理ですかぁ?

Win版のフリーウェアーで、「アメブロペタ自動巡回ソフト」というのがありまして、
実験的にcocoa版でも出来ないかなぁ? と、思ったしだい。

噂では、JavaScriptでできると聴いてましたが、
触った事がないので、さっぱり分からない。

それで、WebKitなどで出来るかな? と、
思って調べてもそれらしい記事はありませんでした。

ボタンのクリックをするんじゃなくて、HTMLデータの中のformやinputタグを解析して、サーバに対して適切なPOSTまたはGET
コマンドを投げてやれば簡単に実現できると思いますが。
POSTやGETコマンドを生成するメソッドはcocoaフレームワーク内にきちんと整備されていますよ。
HTMLプロトコルのGET,POSTコマンドはPHPなどでWebアプリケーションを作ろうというような入門書を見れば載っています。
Cocoaでどのようなメソッドがあるかは、木下氏の描かれたHMDT本の3rd editionだったかに載っていると思います。
NSRequestやそのサブクラスを調べてもいいでしょう。実際、自分はある証券会社のWebサイトに自動で入り、特定の株価を
取得するようなアプリケーションを作って活用しているので、webページ上のボタンなどのデータを操作するのは可能だと思います。
flashとかは分かりませんが。 

加藤敬

unread,
Apr 27, 2009, 9:45:34 PM4/27/09
to cocoa-d...@googlegroups.com
加藤です。

大阪さま
有難う御座います。

早速、調べてみます。


処で、サンプルソフトの在り処をご存知でしたら、
教えて頂けませんか?
言語は問いませんので。

よろしくお願いします。


2009/04/28 8:57 大坂博幸 <hiroch...@gmail.com>:

大坂博幸

unread,
Apr 29, 2009, 9:55:40 PM4/29/09
to cocoa-d...@googlegroups.com
大坂です。


処で、サンプルソフトの在り処をご存知でしたら、
教えて頂けませんか?
言語は問いませんので。

サンプルソフトは知りませんが、NSURLRequestの解説だとかはHMDT 2nd editionに載っていました。
WebKitの項目です。言語は問わないというなら、
のETRADE口座情報がGETコマンドやPOSTコマンドを使っています。JavaScriptだけどね。

別の方向からのアプローチとしては、
FireFoxにLive HTTP Headers というアドオンをインストールして自動化したいWebページを開き、
該当のボタンをクリックしてどのようなリクエストがブラウザからサーバに投げられているのか
みてみると、よく理解できると思います。
POSTを投げるには

NSMutableDictionary *headerFields;

NSMutableString *query = [[NSMutableString stringWithCapacity:1] retain];

NSMutableURLRequest *request = [[NSMutableURLRequest requestWithURL:[NSURL URLWithString:@"アクセスするwebページのURL"]] retain];

//POSTメソッドでログインのためのデータを作る

[request setHTTPMethod:@"POST"];

[headerFields setObject:kETGateBaseURL forKey:@"Referer"];

...ほか必要なheaderfieldsをセット

//パスワード、ユーザと口座管理の画面へのログインデータをHTTPBodyにのせる

[query setString:@""];

//かならずキーワード間は&で繋がないとエラー

//どんな文字列を付加するかはアクセスするwebページによって異なるから自己解析必要

[query appendString:@"_ControlID=WPLETlgR001Control"];

[query appendString:@"&_DataStoreID=DSWPLETlgR001Control"];

[query appendString:@"&_PageID=WPLETlgR001Rlgn10"];

[query appendString:@"&getFlg=on"];

[query appendString:@"&_ActionID=loginStock"];

//アカウントとパスワードの設定

< snip >


//HTTPBodyNSDataの形式に変換しそのサイズはHTTPHeaderに付加しなければならない

NSData *content = [[NSString stringWithString:query] dataUsingEncoding:NSUTF8StringEncoding];

[request setValue:[[NSNumber numberWithLong:[content length]] stringValue] forHTTPHeaderField:@"Content-Length"];

[request setHTTPBody:content];

//ブラウザwindowのwebビューにリクエストを投げる

[[webView mainFrame] loadRequest:[self urlRequestForETGateLogin]];

こんな感じでやります。上のソースは適切に修正しないと動きません。自作プログラムの抜粋なので。

加藤敬

unread,
Apr 30, 2009, 4:56:55 AM4/30/09
to cocoa-d...@googlegroups.com
加藤です。

有難う御座います!

解説付きのコードまで載せて頂きまして、痛み入ります。

早速、実験してみます。

感謝。

2009/04/30 10:55 大坂博幸 <hiroch...@gmail.com>:
Reply all
Reply to author
Forward
0 new messages