ウェブのフォーム入力テストの自動化をしたくて、Seleniumを導入しようとしたところ、下記のエラーが出て起動してくれない

環境:
Linux Ubuntu 18.04LTS
Python 3.7.3
pip 19.0.3
Google Chrome 75.0.3770.142
ChromeDriver 75.0.3770.140 (2d9f97485c7b07dc18a74666574f19176731995c-refs/branch-heads/3770@{#1155})

(unknown error: 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.)

結論としては環境変数$DISPLAYの設定が漏れていたからだった。

echo 'export DISPLAY="${DISPLAY:-:0}"' >> ~/.zshrc

にて解決。

だめな人は単にこれでも動くかも

export DISPLAY=:0.0

解決までの道筋

はじめに下記のURLを参考にSeleniumをインストールした
Python + Selenium で Chrome の自動操作を一通り - Qiita

しかし動かない…Firefoxの方も試してみたけど動かない。

次に下記のURLを参考にスクリーンショットを取得してみる

UbuntuのCLI環境でGoogleChromeを使ってウェブサイトのスクリーンショットを取得する - Qiita

たしかにGoogleの検索画面のスクリーンショットが取得できた。
chromedriverは動いていることを確認

ということは、ブラウザの起動まわりで上手く行っていないということが伺える。

そこでchromeを単体で実行(/usr/bin/google-chrome)してみる。
(google-chrome:29464): Gtk-WARNING **: 17:41:15.291: cannot open display:

というエラーが出て起動しないことで、DISPLAY周りで異常が起こっていることを突き止める。

最終的に下記URLを参考に.zshrcでDISPLAY環境変数を設定できていなかったことに気づく。
ubuntu で root 時に cannot open display となる件 - たつこの部屋


#google.py
import time
from selenium import webdriver

driver = webdriver.Chrome()
driver.get('https://www.google.com/')
time.sleep(5)
search_box = driver.find_element_by_name("q")
search_box.send_keys('ChromeDriver')
search_box.submit()
time.sleep(5)
driver.quit()

参考文献など :
$DISPLAYの設定: ubuntu で root 時に cannot open display となる件 - たつこの部屋
環境変数$DISPLAYについて: DISPLAY - なんなんなん行く?
seleniumのインストール: UbuntuのCLI環境でGoogleChromeを使ってウェブサイトのスクリーンショットを取得する - Qiita




neovimに移行してしばらく経つが、denite.nvimをまともに使っていなかった。

それでウェブ上の記述を参考にしてキーマッピングなどを見直してみたところ以下のようなエラーが出る。


[denite] Traceback (most recent call last):
[denite] File "/home/user/.cache/dein/.cache/init.vim/.dein/rplugin/python3/denite/rplugin.py", line 26, in start
[denite] return ui.start(args[0], context)
[denite] File "/home/user/.cache/dein/.cache/init.vim/.dein/rplugin/python3/denite/ui/default.py", line 63, in start
[denite] self._start_sources_queue(context)
[denite] File "/home/user/.cache/dein/.cache/init.vim/.dein/rplugin/python3/denite/ui/default.py", line 144, in _start_sources_queue
[denite] self._start(context['sources_queue'][0], context)
[denite] File "/home/user/.cache/dein/.cache/init.vim/.dein/rplugin/python3/denite/ui/default.py", line 187, in _start
[denite] self._init_denite()
[denite] File "/home/user/.cache/dein/.cache/init.vim/.dein/rplugin/python3/denite/ui/default.py", line 685, in _init_denite
[denite] self._denite.on_init(self._context)
[denite] File "/home/user/.cache/dein/.cache/init.vim/.dein/rplugin/python3/denite/parent.py", line 35, in on_init
[denite] self._put('on_init', [context])
[denite] File "/home/user/.cache/dein/.cache/init.vim/.dein/rplugin/python3/denite/parent.py", line 62, in _put
[denite] return self._child.main(name, args, queue_id=None)
[denite] File "/home/user/.cache/dein/.cache/init.vim/.dein/rplugin/python3/denite/child.py", line 69, in main
[denite] self.on_init(args[0])
[denite] File "/home/user/.cache/dein/.cache/init.vim/.dein/rplugin/python3/denite/child.py", line 133, in on_init
[denite] raise NameError('Source "' + name + '" is not found.')
[denite] NameError: Source "file_old" is not found.
[denite] Please execute :messages command.

pythonのバージョンが合ってなかったりして問題が起こってるのかな?とか思いつつ前回の記事(neovimの:HealthCheck時にpython周りでエラーが出る時にやったこと » WisdomTrees)の通りdein自体のpython環境を見直したりしたのだけど、直らない。

その後、

:Denite buffer

はうごくのに

:Denite file_rec

などの場合にエラーが出ることがわかった。

このfile_recというコマンドをfile/recとすれば動くという情報を見つけたので、早速やってみると、エラーなしで動きはじめた。参照していたサイトの情報が古かったのだろう。

しかしおかしい。

最近使ったファイルが列挙されるだけで、そのファイルを開くことができない。

なんでや…/(^o^)\

と思いつつも色々検索していると、Denite.nvimの公式サイトを見つけた。

日本語で解説してるサイトがあるのでそちらを優先してみていたが、公式に書いてあるExampleの設定を導入するとあっさりと動いた。

denite.nvim/denite.txt at master · Shougo/denite.nvim · GitHub

英語ドキュメントを読むのに抵抗があっても、やはり一次資料を読むのは大事。

いい教訓になりました。

今はじつに快適に動いてくれているのでDeniteの作者のShougoさんには今日も感謝です。




neovimを使っていて、:HealthCheckを実行時、python3はOKなのにpython2はエラーが出ていた。
python3とpython2、どちらもOKじゃないと問題がないかはわからなかったが、とりあえずエラーが出ている状態というのは気持ちがいいものではないので解決した

環境:
os:Linux Ubuntu18.04LTS
python2:2.7.16
python3:3.7.2

このサーバーではpythonのバージョン管理にpyenvを使っている。

記事執筆時に新しいバージョンだったpython2とpython3を導入している
それぞれ環境のところに書いてあるpythonをpyenvを使ってインストールをした。

その後、~/.config/nvim/init.vimに下記の記述を追加


let g:python_host_prog = expand('~/.pyenv/versions/2.7.16/bin/python2')
let g:python3_host_prog = expand('~/.pyenv/versions/3.7.2/bin/python3')

これで:CheckHealthをするとエラーは消えた

バージョンを直で書くのはよくないとかいう声も聞こえてきそうだけれど、とりあえずはこれでよし

(本当の問題は別のプラグインがまともに動いてくれていなくて、これがpython2がうまく動かないことに起因しているのかを確かめたかったのです)

下記記事を参考にさせていただきました。ありがとうございます。

init.nvim にpython のpath を指定してneovim の起動速度を早くする - Qiita