CasperJSでUTF-8以外のサイトにアクセスしたとき、
どうもうまくいかない。
すべてのサイトでうまくいかないわけではない。ちゃんとaタグやformにidが振られていれば
ページ遷移はできる。でも、idがないaタグ,formタグの送信、フォームに日本語入れて送信テストとか、どうしてもできないサイトがある
capture()でスクリーンショットをとっても文字化け。
いろいろやってみたけど、ひとつの解決方法を見つけた。
それはプロキシサーバDelegateで文字コード変換プロキシを通すこと。
DelegateでCHARCODEのフィルタを使い、このプロキシを通せば、ShiftJISで記述されたサイトがCasperJS(PhantomJS)で
見るときにはUTF-8に変換されているという形になるので
いつも通りCasperJSが書ける
以下Delegateのインストール手順(CentOS6)とそのプロキシをCasperJSから利用する方法。
makeとかはできる環境の前提で
cd /usr/local/src
wget ftp://ftp.delegate.org/pub/DeleGate/delegate9.9.13.tar.gz
tar zxvf delegate9.9.13.tar.gz
cd delegate9.9.13
make
cp src/delegated /usr/local/sbin/
ln -s /usr/local/sbin/delegated /usr/sbin/
mkdir -p /var/lib/delegate/cache
chown -R nobody:nobody /var/lib/delegate
mkdir -p /etc/delegate/
/etc/delegate/http_to_utf8.conf
#####################################
-P28080
SERVER=http
CHARCODE=UTF-8
RELIABLE="127.0.0.1,192.168.1.*"
LOGFILE="/var/log/delegate/http.log"
PROTOLOG="/var/log/delegate/access.log:%X %D"
ERRORLOG="/var/log/delegate/error.log"
#####################################
/etc/init.d/delegated
#!/bin/sh
#
DELEGATE=/usr/sbin/delegated
CONFDIR=/etc/delegate
DGROOT=/var/spool/delegate-nobody
mkdir -p /var/log/delegate
if [ ! -x $DELEGATE ]; then
echo -n $"$DELEGATE does not exist."; warning; echo
exit 0
fi
if [ ! -r $CONFDIR ]; then
echo -n $"$CONFDIR does not exist."; warning; echo
exit 0
fi
RETVAL=0
start() {
echo -n $"Starting up Http DeleGate daemon: "
for CONFIG in $CONFDIR/*.conf ; do
#$DELEGATE -P28080 SERVER=http CHARCODE=UTF-8 LOGFILE="/var/log/delegated" DGROOT=$DGROOT +=$CONFIG
$DELEGATE DGROOT=$DGROOT +=$CONFIG
echo
done
return 0
}
stop() {
echo -n $"Shutting down Http DeleGate daemon: "
for CONFIG in $CONFDIR/*.conf ; do
$DELEGATE DGROOT=$DGROOT +=$CONFIG -Fkill
echo
done
return 0
}
restart() {
stop
start
}
# See how we were called.
case "$1" in
start)
start
;;
stop)
stop
;;
restart)
restart
;;
*)
echo "Usage: $0 {start|stop|restart}"
exit 1
esac
exit 0
このプロキシをCasperJSから利用するには以下
casperjs --proxy=127.0.0.1:28080 test.casper.js --xunit=log.xml