2016年3月アーカイブ

昨日より、各キャリアで予約開始しました。
発売は3/31ですね。

恥ずかしながら、未だにiPhone5cと4sを使っています。
しかも3G回線で・・・。SIMをカットして使っています。
WifiルータがLTE回線なんで、通話用にLTEや4Gはいらないんだよね。
SIMフリーのiPhone SEを買おうかな、メモリも2GBだし・・・と思う今日この頃です。

前回、最後にちらっと書いたiMacrosを使ってみます。

ログイン、初回検索、2回目以降検索の3つのマクロを用意します。

login.iim (ログイン用マクロ)
VERSION BUILD=8961227 RECORDER=FX
URL GOTO=https://websearch.rakuten.co.jp/login.html
SET !ENCRYPTION NO
TAG POS=1 TYPE=INPUT:TEXT FORM=NAME:LoginForm ATTR=ID:loginInner CONTENT={{!VAR2}}
TAG POS=1 TYPE=INPUT:PASSWORD FORM=NAME:LoginForm ATTR=ID:loginInner CONTENT={{!VAR3}}
TAG POS=1 TYPE=INPUT:SUBMIT FORM=NAME:LoginForm ATTR=NAME:submit
WAIT SECONDS=10

search-first.iim (初回検索マクロ)
VERSION BUILD=8961227 RECORDER=FX
TAG POS=1 TYPE=INPUT:TEXT FORM=ID:SimpleTopForm ATTR=ID:sf_qt CONTENT={{!VAR1}}
TAG POS=1 TYPE=INPUT:IMAGE FORM=ID:SimpleTopForm ATTR=ID:sBtn

search.iim (2回目以降検索マクロ)
VERSION BUILD=8961227 RECORDER=FX
TAG POS=1 TYPE=INPUT:TEXT FORM=ID:myForm ATTR=ID:srchformtxt_qt CONTENT={{!VAR1}}
TAG POS=1 TYPE=INPUT:IMAGE FORM=ID:myForm ATTR=ID:searchBtn

1回目の検索と2回目以降の検索のFormのidが異なるため、別々のマクロに分けてあります。
そして、上記3つのマクロを動作させるJavascriptを用意します。

rakuten-search.js
var userId ="xxxxxxxxxx";  // TODO 設定
var password = "xxxxxxxxx";  // TODO 設定
var keywords = ["検索ワード1",
				"検索ワード2",
				"検索ワード3",
				"検索ワード4",
				"検索ワード5",
				"検索ワード6",
				"検索ワード7",
				"検索ワード8",
				"検索ワード9",
				"検索ワード10",
				"検索ワード11",
				"検索ワード12",
				"検索ワード13",
				"検索ワード14",
				"検索ワード15",
				"検索ワード16",
				"検索ワード17",
				"検索ワード18",
				"検索ワード19",
				"検索ワード20",
				"検索ワード21",
				"検索ワード22",
				"検索ワード23",
				"検索ワード24",
				"検索ワード25",
				"検索ワード26",
				"検索ワード27",
				"検索ワード28",
				"検索ワード29",
				"検索ワード30"
];

// ログイン
iimSet("VAR2",  userId);
iimSet("VAR3",  password);
iimPlay("login");

// 初回検索
iimSet("VAR1", keywords[0]);
iimPlay("search-first");

// 2回目以降検索
for (var i = 1; i < keywords.length; i++) {
	iimSet("VAR1", keywords[i]);
	iimPlay("search");
}
ユーザID、パスワード、検索ワード1~30は各自使用しているものを入力してください。

上記の4つのファイルを
C:\Users\{ユーザID}\Documents\iMacros\Macros
に置きます。
※{ユーザID}は、windowsにログインするときのユーザIDです。
 上記は、Windows Vistaのときの置き場です。
 Windows 8.1だとC:\UsersがC:\ユーザー
 だったりするのでご注意ください。

Firefoxを起動して、rakuten-search.jsを選択、Playボタンをクリックして実行します。

毎日、自動的に動作させる方法は、こちらをご参照ください。
引数の指定は、
imacros://run/?m=rakuten-search.js
を指定してください。
さて、久しぶりにブラウザの自動操作について調べてみる。
2008年当時は、Google Chromeはリリースされたばかり(2008年9月2日)で、
IEは、Windows7も発売前なのでIE8もなくIE7が最新、
Firefoxは、バージョンは3.0(現在は45)という時代だった。
当然ながらIEが主流だったし、ブラウザの自動操作を行うのもIE以外は考えられなかった。
なんで、VBやVCを使ってDLLの中身を解析しながらプログラムしていたのが、懐かしい。

で、今や便利な世の中になったものでブラウザの自動操作をするのにSeleniumという
ツール(フレームワーク)が登場した。
元々は、ブラウザを使ったWebアプリケーションの開発で、
ブラウザ操作のテストを自動化するために、作られたフレームワーク。
人が手でブラウザを操作する代わりにSeleniumがブラウザを操作してくれる。

当時からSeleniumがあれば、数年前に作ってたブラウザ自動操作アプリが
もっと簡単に作れたのに・・・。
嘆いても、しょうがないので、さっそく使ってプログラムを作ってみます。

まずは、こちらからSeleniumをダウンロード。
プログラム言語は、Java, C#, Ruby, Python, Javascriptからお好きなものを選べます。
今回は、Javaでプログラミングしてみます。

そして、インストールと開発環境の設定。今回はJavaということで、Eclipseを使用。
こちらのサイトを参考にしました。

楽天スーパーサーチで自動検索して、山分けポイントをGetするプログラムを作ってみます。
ブラウザはFirefoxを対象にしました。

package rakuten.search;

import org.openqa.selenium.By;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.WebElement;
import org.openqa.selenium.firefox.FirefoxDriver;

public class UseDriver {

	// ログインURL
	static final String URL = "https://websearch.rakuten.co.jp/login.html";
	// ログインユーザID
	static final String USER_ID = "xxxxxxxxxx"; // TODO 変更
	// ログインパスワード
	static final String PASSWORD = "xxxxxxxxxx";  // TODO 変更

	// ドライバ
	static WebDriver driver = null;

	// 検索するワード
	static String[] keywords = {
			"Google",
			"Firefox",
			"Facebook",
			"Twitter",
			"Line"
	};
	
	public static void main(String[] args) {
		// Firefoxのドライバを生成
		driver = new FirefoxDriver();

		try {
			// ログイン
			driver.get(URL);
			WebElement userId = driver.findElement(By.name("u"));
			userId.sendKeys(USER_ID);
			WebElement passwd = driver.findElement(By.name("p"));
			passwd.sendKeys(PASSWORD);
			passwd.submit();
		} catch (Exception e) {
			return;
		}
		
		// 全ワード検索を行う。
		int i = 0;
		while(i < keywords.length) {
			if (search(i)) {
				i++;
			} 
		}
		driver.quit();
	}
	
	private static boolean search(int i) {
		String key = keywords[i];
		try {
			// ページがロードされ終わるまで待つ。
			// 1秒のタイムアウトを設定。
			Thread.sleep(1000);

			// 検索ワードのテキストボックスを取得。
			WebElement search = driver.findElement(By.name("qt"));
			// 検索する単語を入力。
			search.clear();
			search.sendKeys(key);
			// フォームをサブミット。
			search.submit();
			return true;
		} catch (Exception e) {
			return false;
		}
	}
}

1秒以内に、検索結果が表示されないと次の単語の検索が失敗しますが、
検索結果が表示されるまで、再試行をするようになっています。
このプログラムを動かせば、5口ゲットです。
楽天ツールバーをインストールしていれば、30口まで検索できるはず
なのですが、残念ながら生成したドライバのウィンドウには楽天ツールバーが
表示されないので、5口までとなります。

30口検索するなら、iMacrosというFirefoxのアドオンが便利です。
使い方は、別の機会に。

Movable Typeのバージョンを4.2から6.24にアップしました。
最後の記事が2009年5月30日と、約6年10ヶ月振りに更新です。

いろいろハマりましたが、無事動きました。
特にはまった点をとりあえず、挙げておきます。

・昔入れておいたVisitor Statusのプラグインでブログ再構築時にエラー発生。
 _hdlr_blog_urlが見つからないとか怒られる。
 バージョンアップのため、DBをSQLiteからMySQLに変更したので、
 元々動作してなかったのが動作するようになりエラーが発生するようになってしまった。
 (これはMovable Type 4.2の問題)
 ここを参考にして解決しました。

・コメントが投稿できない。
 コメントを投稿できませんでした。エラー: 不正な要求です。と怒られる。
 ここを参考にして解決しました。


そして、今回バージョンアップとともに、以下のプラグインを入れました。

MT-Keystrokes
 スパムコメント対策用です。
 7年近く放っておいたら、7000件近くスパムコメントが・・・
 CAPTCHA 認証は入れてあってもこのザマなので、強化のために入れました。

Tiny Gimpy
 こちらは、トラックバック用のCAPTCHA認証です。
 試験運用です。スパムがひどいようなら、トラックバックは許可しないようにします。

EmojiForTinyMCE
 絵文字を入力できるようにするプラグインです。

SyntaxHighlighter for Movable Type
 ソースコードを整形して表示してくれるプラグインです。
 こいつもハマりましたが、自己解決。
 正しく動作させるためには、
 mt-config.cgiのStaticWebPathが設定してないと動作しません。
 CGIPathで指定したパスの直下にmt-staticのディレクトリがあれば、
 StaticWebPathの設定をしなくてもMTは動作するので、設定していなかったのですが
 SyntaxHighlighterを動作させるためには必要です。

プロフィール

よっしー
  
  
フリーでSEをやっています。よろしくお願いします。

2016年4月

          1 2
3 4 5 6 7 8 9
10 11 12 13 14 15 16
17 18 19 20 21 22 23
24 25 26 27 28 29 30

最近のコメント