Node.jsで暗号資産アービトラージ

ビットコイントレード中心にNode.jsで実際に作るためのレシピ

【Node.js】Puppeteerのpage.type()で日本語入力が反転してしまう場合の対処法

※このページは2019/7/14に作成されました。

こんにちは、ケネです。

この記事ではNode.jsのライブラリPuppeteerを使って文字入力する場合の注意事項について解説します。

外部サーバにPuppeteerを設定してブラウザの自動操作をさせる際にサーバの設定によっては日本語入力が反転してしまう場合があります。
(「こんにちは」と入力したいのに「はちにんこ」となってしまう)

同じ事象で困っている人はぜひ参考にしてください。

page.type()で日本語入力が反転してしまう原因

以下の原因が当てはまる人はこの記事で解決できます。

日本語入力のみで発生

日本語については「こんにちは」が「はちにんこ」に反転してしまいましたが、英語については反転しませんでした。
(「Hello」は「Hello」のまま)

この切り分けができたことで日本語入力(言語設定)に問題があると推測できます。

外部サーバで発生

私の場合は外部サーバ(CentOS7)で発生していましたが、MacBookで動かしたところ問題は発生しませんでした。

そのため、Puppeteerの設定ではなく、外部サーバ(CentOS7)の設定が問題と推測できます。

inputタグで発生

条件はpage.type()でinputタグに日本語文字入力をした場合です。

inputタグの例
<input type="text" name="username" placeholder="username">

textareaタグ<textarea>では発生しませんでした。

page.type()で日本語入力が反転してしまう際の対処法

CentOS7の言語設定を日本語対応にする

CentOS7の言語設定を確認します。
localeがLinuxデフォルトのCとなっているとPuppeteerの日本語入力が反転します。

「ja_JP.utf8」などの日本語対応の言語設定に変更します。

CentOS7の言語設定を確認する

localectl statusコマンドか、/etc/locale.confを参照して確認します。

$ localectl status
   System Locale: LANG=C
       VC Keymap: jp106
      X11 Layout: jp
$ cat /etc/locale.conf
LANG=C

この場合、Cとなっているため変更が必要です。

CentOS7の言語設定を変更する

localectl set-localeコマンドで「ja_JP.utf8」に変更します。
変更は永続的に反映されます。

$ sudo localectl set-locale LANG=ja_JP.utf8
$ localectl status
   System Locale: LANG=ja_JP.utf8
       VC Keymap: jp106
      X11 Layout: jp
$ cat /etc/locale.conf
LANG=ja_JP.utf8

「ja_JP.utf8」に更新されたことが確認できました。

言語変更できないときの暫定対処

権限などの問題でサーバの言語設定が変更できない場合、暫定的に文字列を反転させる方法があります。

(文字列).split("").reverse().join("")で対応できます。

let inputValue = "はちにんこ"
let inputValueReversed =  inputValue.split("").reverse().join("");
// こんにちは

まとめ

Puppeteerでinputタグの文字列が反転する場合、サーバの日本語設定を変更することで対応できます。


Puppeteerを学習できる数少ない書籍です。

Puppeteer入門 スクレイピング+Web操作自動処理プログラミング

Puppeteer入門 スクレイピング+Web操作自動処理プログラミング

自作アプリケーション初心者にはさくらVPSが手軽でおすすめです。