ã¿ãªãã
ãä¹
ãã¶ãã§ãã½(´ã¼ï½)ãå¤ä¼ã¿ã®å®¿é¡çµããã¾ããï¼
æ¯æ¥ãå¤ä¼ã¿ã®æçµæ¥ã¿ãããªçæ´»ãã¦ããã¾ã¡ããã§ãï¼
ãã¦ãã¦
ä»æ¥ã¯ WebKit ãµã¼ãã¼ã¨ãããã®ãä½ã£ã¦ã¿ãã®ã§ãç´¹ä»ãã¦ã¿ã¾ãã
WebKit ã£ã¦ä½ï¼
WebKit ã£ã¦ããã®ã¯ Chrome ã Safari ã®ä¸ã«å
¥ã£ã¦ããã©ã¦ã¶ã®ã¨ã³ã¸ã³ã®ãã¨ã§ãï¼
å®ã¯ãã©ã¦ã¶ã£ã¦ããã®ã¯ãã¨ã³ã¸ã³é¨åã¨è¦ãç®ã®é¨åï¼ã¿ãã¨ããã¿ã³ã¨ããï¼ã«å¥ãã¦ãã¦ãæå¤ã¨éããã©ã¦ã¶ã§ãã¨ã³ã¸ã³é¨åã¯åããã®ã使ã£ã¦ãã£ã¦ãã¨ãå¤ããã§ãã(*´ã¼ï½)
ãã©ã¦ã¶ã®ãµã¼ãã¼ã£ã¦ã©ããããã¨ï¼
è¦ã¯ããµã¼ãã¼ãµã¤ãã§ãã©ã¦ã¶ãèµ·åã㦠JavaScript ãå®è¡ãããã JavaScript ãå®è¡ãããªãã¨èªããªããã¼ã¸ããå¤ãæã£ã¦ããã®ã«ä½¿ã£ãããããã¨ããéèã§ãã
ä»ã¾ã§ã¯ããããã®ãªãã£ãã®ï¼
å®ã¯ãä»ã¾ã§ã¯ JavaScript ã使ããªãã¨èªããªããããªãã¼ã¸ããå¤ãæã£ã¦ããã®ã« Phantom.js ã¨ãã便å©ãªã½ããã¦ã§ã¢ããã£ããã§ãã
http://www.phantomjs.org/
ã§ãã Phantom.js ã«ã¯ã¡ãã£ã¨ããåé¡ç¹ããã£ã¦ãä»ä»äºã§ãã£ã¦ããã¨ã« Phantom.js ãåããªããªã£ã¦ãã¾ã£ãã®ã§ãï¼ï¼
Phantom.js ã®åé¡ç¹
- ä»ã®ããã°ã©ã ã¨é£æºãããã¨æã£ãã¨ãã«ãããã»ã¹éã§éä¿¡ããæ段ãã©ã¤ãã©ãªã¨ãã¦å¼ã³åºãæ段ããªã
- 度ã èµ·åãããçµäºãããããã«ã¯éããã
- ã¡ã¢ãªãé£ã
- Xvfb ãå ¥ããªãã¨ãããªãï¼ãããã¡ã¢ãªé£ãï¼
- éã JavaScript ãå®è¡ãã㨠WebKit ã®å²ãè¾¼ã¿ãçºçãããããããä½ãéç¥ãã¦ãããªãã®ã§ä½ãèµ·ãã£ã¦ãã®ãåãããªããªããï¼ãã®ç¶æ ã«ãªãã¨ãããã»ã¹ã殺ããããªããªãï¼
- å®è¡ãã¿ã¤ã ã¢ã¦ãããæ段ããªã
- confirm ã prompt ã§æ¢ã¾ã£ã¦ãã¾ãï¼ãã®ç¶æ ã«ãªãã¨ãããã»ã¹ã殺ããããªããªãï¼
ã¨ããããã§
ãããã®åé¡ç¹ããã¼ãã¶è§£æ±ºãã¡ãããï¼ã£ã¦ããã®ãä»åä½ã£ããµã¼ãã¼ã§ãã
ã³ã¼ã
ã¨ããããã以ä¸ã®ã¨ããã«ç½®ãã¦ããã¾ãã
webkitd/webkitd.py at master · amachang/webkitd · GitHub
ä»åä½ã£ã WebKit ãµã¼ãã¼ã®ç¹å¾´
- å¤é¨ãã·ã³ããå¤é¨ããã»ã¹ã¨ã½ã±ããã§éä¿¡ãã
- ã©ã¤ãã©ãªã¨ãã¦ã使ãã
- ãµã¼ãã¼ãªã®ã§ä½¿ã度ã®èµ·åãåæ¢ã®ã³ã¹ãããªã
- ã¡ã¢ãªãé£ããã©ãã¡ã¢ãªè±å¯ãªãã·ã³ãä¸å°ããã°è¯ã
- Xvfb ãã¤ã³ã¹ãã¼ã«ãããã·ã³ãä¸å°ã§è¯ã
- éã JavaScript 㧠WebKit ã®å²ãè¾¼ã¿ãçºçããå ´åãã¡ããã¨æãã¦ããã
- WebKit ãæä½ããã¨ãã«ãã¿ã¤ã ã¢ã¦ãæéãè¨å®ã§ãã
- ä¸ã¤ã®ã³ãã¯ã·ã§ã³ã«å¯¾ãã¦ä¸ã¤ã®ã¦ã§ããã¼ã¸ãªãã¸ã§ã¯ã
- è¡ãã¼ã¹ã® JSON ãããã³ã«
- ã·ã³ã°ã«ããã»ã¹ãã·ã³ã°ã«ã¹ã¬ãããã¤ãã³ãã«ã¼ãã«ããéåæå¦ç
èµ·åã®ããã
ã¨ãããããããã©ã«ãã®è¨å®ã§ã¤ã³ã¹ãã¼ã«ããã¦ã® Ubuntu 11.04 ãµã¼ãã¼ããã£ãã¨ãã¦è§£èª¬ãã¾ããã
ãããé ã«ãã£ã¦ããã°ããã¶ã使ããã¨æãã¾ãã
1. å¿ è¦ãªãã®ãã¤ã³ã¹ãã¼ã«ãã
apt-get ã§å¿ è¦ãªãã®ãã¤ã³ã¹ãã¼ã«ãã¾ã
$ sudo apt-get install git-core python-qt4 python-daemon xvfb daemon rlwrap (ç¥) Do you want to continue [Y/n]? Y
Y ã¨çãã¾ããã¡ãã£ã¨æéããããã¾ãï¼ï¼
2. ã³ã¼ããæã£ã¦ãã
git 㧠WebKit ãµã¼ãã¼ã®ã³ã¼ããæã£ã¦ãã¾ã
$ git clone git://github.com/amachang/webkitd.git (ç¥)
3. Xvfb ãèµ·åãã
$ sudo daemon -X "/usr/bin/Xvfb :1 -screen 0 1024x768x24" --name Xvfb $ export DISPLAY=:1.0
4. WebKit ãµã¼ãã¼ãèµ·åããï¼
$ python webkitd/webkitd.py start
ã¨ã©ã¼ã«ãªãã¾ãããï¼ããããï¼ããã§èµ·åãã¾ãããï¼
ã¡ãªã¿ã«ã詳細ãªãªãã·ã§ã³ã¯ã以ä¸ã®ããã«ããã¨è¦ããã¨ãåºæ¥ã¾ã
$ python webkitd/webkitd.py -h
使ã£ã¦ã¿ãï¼
ã§ã¯ããã£ãã使ã£ã¦ã¿ã¾ããã
æ¬å½ã¯ãã½ã±ããã使ã£ã¦ããã°ã©ã ãæ¸ããªããã°ãããªãã®ã§ããã telnet ã¨ããã³ãã³ãã使ãã¨ã³ãã³ãã©ã¤ã³ããã½ã±ããéä¿¡ã試ããã¨ãåºæ¥ãã®ã§ããã使ãã¾ã
1. æ¥ç¶ãã
以ä¸ã®ããã«æã£ã¦æ¥ç¶ãã¾ã
$ rlwrap telnet 127.0.0.1 1982
以ä¸ã®ãããªç¶æ ã«ãªã£ãããæ¥ç¶ã§ãã¦ãã¾ãï¼
Trying 127.0.0.1... Connected to 127.0.0.1. Escape character is '^]'.
2. Yahoo ã«ã¢ã¯ã»ã¹ãã¦ã¿ã
æ¥ç¶ã§ãããã
以ä¸ã®ããã«ä¸è¡ã§æ¸ãã¦ã¿ã¦ãã ãã
{ "type": "load-url", "data": { "url": "http://www.yahoo.co.jp/", "timeout": 10 } }
ããã¯ããhttp://www.yahoo.co.jp/ ã«ã¢ã¯ã»ã¹ã㦠10 ç§ä»¥å
ã«å®äºããªãã£ããã¿ã¤ã ã¢ã¦ããã¦ãããã¨ããæå³ã§ã
æåããã¨ä»¥ä¸ã®ãããªçµæãè¿ããã¾ã
{"data": {"status": 200, "ok": true, "title": "Yahoo! JAPAN", "url": "http://www.yahoo.co.jp/", "finalUrl": "http://www.yahoo.co.jp/", "timeouted": false}}
ããããï¼ã¢ã¯ã»ã¹ã§ãã¦ã
3. ãã¼ã¸ããå¤ãåå¾ãã¦ã¿ã
次ã«å¤ãåå¾ãã¦ã¿ã¾ãããã
以ä¸ã®ããã«ä¸è¡ã§æ¸ãã¦ã¿ã¦ãã ãã
{ "type": "get-element-value", "data": { "xpath": "/descendant::a[1]", "attr": "href", "timeout": 10 } }
ããã¯ããæåã«åºç¾ãããªã³ã¯ã® href ãæã£ã¦ãã¦ãã¨ããæå³ã§ã
æåããã¨ä»¥ä¸ã®ãããªçµæãè¿ããã¾ã
{"data": {"count": 1.0, "propValue": "http://www.yahoo.co.jp/_ylh=X3oDMTB0NWxnaGxsBF9TAzIwNzcyOTYyNjUEdGlkAzEyBHRtcGwDZ2Ex/r/mphp", "hasProp": true, "attrValue": "r/mphp", "found": true, "error": false, "hasAttr": true, "timeouted": false}}
ã¡ããã¨ããªã³ã¯ãæã£ã¦ããã¾ãããï¼
4. ã¯ãªãã¯ãã¦ã¿ã
以ä¸ã®ããã«ããã¨æåã®ãªã³ã¯ã«å¯¾ãã¦ã¯ãªãã¯ããããã¨ã«ã§ãã¾ãã
{ "type": "click-element", "data": { "xpath": "/descendant::a[1]", "timeout": 10 } }
5. ç¾å¨ã®ç¶æ ã確èªãã¦ã¿ã
以ä¸ã®ããã«ããã¨ãã©ã¦ã¶ã®ç¶æ ã確èªã§ãã¾ãã
{ "type": "server", "data": { "command": "status" } }
ã¡ããã¨ãã¼ã¸ãé·ç§»ãã¦ãã¾ããã
{"data": {"objectCount": 17, "selectedText": "", "objectCountMap": {"QUndoStack": 1, "QWindowsStyle": 1, "QSessionManager": 1, "QNetworkAccessManager": 1, "QGuiEventDispatcherGlib": 1, "WebKitPage": 1, "QWebFrame": 1, "QNetworkCookieJar": 1, "QApplication": 1, "QNativeSocketEngine": 2, "WebKitWorker": 1, "WebKitServer": 1, "QSocketNotifier": 3, "QTcpSocket": 1}, "title": "Yahoo! JAPANããããã¼ã¸ããã¼ã ãã¼ã¸ã«è¨å®ããã", "url": "http://www.yahoo.co.jp/promotion/startpage/", "totalBytes": 23748, "height": 2083, "width": 950, "requestedUrl": "http://www.yahoo.co.jp/_ylh=X3oDMTB0NWxnaGxsBF9TAzIwNzcyOTYyNjUEdGlkAzEyBHRtcGwDZ2Ex/r/mphp"}}
ä»ã«ã
以ä¸ã®ãããªãã¨ãåºæ¥ã¾ã
- ã¹ã¯ãã¼ã«ã®æä½
- è¦ç´ ãåºç¾ããã¾ã§å¾ ã¤
- ä»»æã® JavaScript ãå®è¡
- å¤ã®å ¥å
ã©ã¤ãã©ãªã¨ãã¦ã使ãã¾ã
ãã® webkitd.py ãä»åç´æ¥å®è¡ãã¾ããããå¤é¨ã® python ã¹ã¯ãªãããã import ãã¦ä½¿ããã¨ãåºæ¥ã¾ãã
ç¬èªã®ã³ãã³ããã Java ãæå¹ã«ãããã Plugin ãæå¹ã«ããããã»ãã¥ãªãã£ã®è¨å®ãå¤ãããã¨ããããæ¡å¼µããããããã«ä½ã£ãã¤ããã§ãã
ã ããããããªæãã§ãï¼
ã¾ã ã¾ã ãæªå®æ㪠WebKit ãµã¼ãã¼ã§ããä»äºã§ä½¿ãã¤ã¤ãã³ã¼ãããã¹ããã¢ãããã¼ããã¦ãããã¨æã£ã¦ãã¾ãã®ã§ãçã¬ããã¦ã©ãããã¦ããã ããããªã¼ã¨æãã¾ãã
ã§ã¯ã§ã¯ã¼ã½(´ã¼ï½)ã