SeleniumとPythonでホバー処理を実装する方法


Photo by Sai Kiran Anagani on Unsplash

こんにちは!
個人開発者の南です!

今回は僕が、Seleniumを使って自作のWordPressテーマ「GuildPress」の自動テストを取り組んでいた時に出てきたホバー処理の実装方法について紹介します!

実はホバー処理をしなくても単純に要素を見つけて、そのリンク先に飛べば良いということに後でコードを書いていて気づきました。

でも、ホバーしている様子を見ることで、実際にどのページをクリックしているとか、ホバーの動作を確認することができます。

なので、ホバーは処理は覚えておいて損はないと思います。

ホバー処理について


Photo by freestocks.org on Unsplash

Seleniumでホバー処理をするには、下記のようにコードをかきます。

ちなみに、コード上の「driver」の部分はwebdriver.Chrome()などの、実際に使用しているドライバーの値を入れるようにします。

書いているコードの解説



Photo by Ilya Pavlov on Unsplash

コメントに書いてあるとおり、このコードは次の4つの処理に別れています。

1.要素を取得
2.ActionChainsのインスタンスを作成
3.要素のリンクを取得してクリック

それぞれについて解説していきます。

要素を取得について

ここでは、find_element_by_xpathを使って管理画面メニューの固定ページの要素を取得しています。

実際のコードでは下記の部分です。

ActionChainsのインスタンスを作成

次は、ActionChainsのコードについてです。

ActionChainsとは、Seleniumでマウスの動きやキーの操作などを表現する時に使うクラスのことです。

SeleniumのActionChainsのドキュメントはこちら

要素が取得できたら、move_to_elementで要素にマウスを移動する処理を行います。

そのあとに、perform()で実際に要素にマウスを移動したという処理を実行します。

そうすることで、下記の画像のようにホバーしている要素を実現することができます。


3.要素のリンクを取得してクリックについて

ActionChainsで、ホバーを実装することはできますが、そこから更に表示された要素に移動するということができませんでした。。。

そこで色々調べてみたのですが、結局解決策が見つかりませんでした。

でも、よくよく考えたら管理画面のメニューを表示しているので、要素には別の方法でアクセスすることができるということに気づきました。

その時のツイートが下記です笑

記事はこちら

単純に表示されているので、href要素を取得すれば良いということに気づきました。

そこで、下記のコードを書いてマウスホバーをリンクをクリックという処理を実装しました。

マウスホバーに頭を取られていると、意外と気づかないものですね。。。

インポートしているものについて


Photo by Clem Onojeghuo on Unsplash
ActionChainsを使う時は、下記のようにActionChainsのクラスをロードするようにしましょう。

これで、Python上でActionChainsを使用することができるようになります。

まとめ

今回はSeleniumを使ってメニューの要素をホバーする方法を紹介しました。

この記事が僕と同じように、Seleniumでホバーを実装するにはどうすればいいか悩んでいるあなたの助けになれば嬉しいです。

この記事を書いた人

南 健太郎

1991年生まれ。都内でエンジニアをしています。
このブログでは、個人開発や日々の技術に関する情報などを発信していきます。