前書き#
博主の Windows サーバーが期限切れになるため、以前 Windows マシンで実行していたものを Linux に移行する必要があります。そして、小学校 2 年生が書いたクソコードを実行しようとしたら、実行できないことがわかりました。そして、今日のこの記事ができました。
インストール#
Google Chrome のインストール
wget https://dl.google.com/linux/direct/google-chrome-stable_current_amd64.deb
apt install ./google-chrome-stable_current_amd64.deb -y
rm google-chrome-stable_current_amd64.deb
(国内ではこのアドレスは利用できません)
google-chrome --version
を入力して、インストールが成功したかどうかを確認します。
正常にバージョンが表示されれば、インストールが成功したことを意味します。
NPM で npm install selenium-webdriver
を実行すると、理論的には node プロジェクトで使用するための chromedriver が設定されます。例として、先月作成した Hostloc のポイントを増やすための小さなプログラムを取り上げましょう。その時、すべての設定が完了した後に実行するとエラーが発生しました。
root@NekoServer:~# node main.js
=.=
An error occurred: session not created: Chrome failed to start: exited normally.
(session not created: DevToolsActivePort file doesn't exist)
(The process started from chrome location /usr/bin/google-chrome is no longer running, so ChromeDriver is assuming that Chrome has crashed.)
/root/node_modules/selenium-webdriver/lib/error.js:524
let err = new ctor(data.message)
^
SessionNotCreatedError: session not created: Chrome failed to start: exited normally.
(session not created: DevToolsActivePort file doesn't exist)
(The process started from chrome location /usr/bin/google-chrome is no longer running, so ChromeDriver is assuming that Chrome has crashed.)
at Object.throwDecodedError (/root/node_modules/selenium-webdriver/lib/error.js:524:15)
at parseHttpResponse (/root/node_modules/selenium-webdriver/lib/http.js:601:13)
at Executor.execute (/root/node_modules/selenium-webdriver/lib/http.js:529:28)
at process.processTicksAndRejections (node:internal/process/task_queues:95:5) {
remoteStacktrace: '#0 0x5611b9842f83 <unknown>\n' +
'#1 0x5611b94fbcf7 <unknown>\n' +
'#2 0x5611b953360e <unknown>\n' +
'#3 0x5611b953026e <unknown>\n' +
'#4 0x5611b958080c <unknown>\n' +
'#5 0x5611b9574e53 <unknown>\n' +
'#6 0x5611b953cdd4 <unknown>\n' +
'#7 0x5611b953e1de <unknown>\n' +
'#8 0x5611b9807531 <unknown>\n' +
'#9 0x5611b980b455 <unknown>\n' +
'#10 0x5611b97f3f55 <unknown>\n' +
'#11 0x5611b980c0ef <unknown>\n' +
'#12 0x5611b97d799f <unknown>\n' +
'#13 0x5611b9830008 <unknown>\n' +
'#14 0x5611b98301d7 <unknown>\n' +
'#15 0x5611b9842124 <unknown>\n' +
'#16 0x7f9436572609 start_thread\n'
}
Node.js v18.17.1
root@NekoServer:~#
chromedriver の問題だと一時的に思い込んで、手動で chromedriver をインストールしようとしました。
wget https://edgedl.me.gvt1.com/edgedl/chrome/chrome-for-testing/120.0.6099.109/linux64/chromedriver-linux64.zip
unzip chromedriver-linux64.zip
mv chromedriver-linux64/chromedriver /usr/bin/
rm -rf chromedriver-linux64
chromedriver --version
(最新バージョンの ChromeDriver はこちらで入手できます)
それからもう一度実行してみましたが、まだ同じ問題が発生しています。そして、私は google-chrome
を実行してみました。ああ、わかりました。
おそらく、このものは通常、root ユーザーの下では実行できないので、 --no-sandbox
パラメータを追加して実行する必要があります。
Options CV をプロジェクトから見つけて、 --no-sandbox
の行を追加してもう一度実行します。
それから実行できるようになりました。
┐(´-`)┌
この記事はMix Spaceから xLog に同期されています。
元のリンクはhttps://blog.nekorua.com/posts/technology/103.htmlです。