質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
Python 3.x

Python 3はPythonプログラミング言語の最新バージョンであり、2008年12月3日にリリースされました。

selenium

Selenium(セレニウム)は、ブラウザをプログラムで作動させるフレームワークです。この原理を使うことにより、ブラウザのユーザーテストなどを自動化にすることができます。

Q&A

解決済

1回答

1395閲覧

Python selenium マウスオーバーができない

takFF

総合スコア14

Python 3.x

Python 3はPythonプログラミング言語の最新バージョンであり、2008年12月3日にリリースされました。

selenium

Selenium(セレニウム)は、ブラウザをプログラムで作動させるフレームワークです。この原理を使うことにより、ブラウザのユーザーテストなどを自動化にすることができます。

0グッド

0クリップ

投稿2023/01/01 16:33

編集2023/01/02 00:00

自社サイトの操作の自動化をしたい

ここに質問の内容を詳しく書いてください。

python seleniumで、システムの提携操作の自動化(入力操作)をしたい。
大体できたが、
1段階目のメニューで、ある選択肢("マスタ")をクリック
その下に2つの選択肢が出る(2段階目)
そこで1つ目の選択肢("マスタ-1")にマウスオーバーする( マウスを移動)
するとその右に3段階目の選択肢("見込顧客マスタメンテ")が出る。
そこで選択肢を選択する→画面遷移

という流れで、
マウスオーバーのところだけできない。
手動でマウスオーバーしたら、あとは出てくる3段階目の選択肢が自動で選択されて先へ進んでいく。

自動でマウスオーバーできるようにしたい

発生している問題・エラーメッセージ

マウスオーバーされない

該当のソースコード

python

1import gspread 2from oauth2client.service_account import ServiceAccountCredentials 3from selenium import webdriver 4from selenium.webdriver.common.by import By 5from selenium.webdriver.common.keys import Keys 6import time 7#マウスオーバー処理に必要なライブラリ 8from selenium.webdriver.common.action_chains import ActionChains 9 10from selenium.webdriver.support.ui import WebDriverWait 11from selenium.webdriver.support import expected_conditions 12from selenium.webdriver.support.ui import Select 13import datetime 14 15from selenium.webdriver.support.select import Select 16 17from pykakasi import kakasi 18 19 20 21kakasi = kakasi() 22kakasi.setMode('J', 'H') #漢字からひらがなに変換 23kakasi.setMode("K", "H") #カタカナからひらがなに変換 24conv = kakasi.getConverter() 25#str = '東京タワー' 26#print(conv.do(str)) 27 28 29 30# chromedriver.exeがある場所 31driver_path = "driver/chromedriver.exe" 32 33 34 35# webdriverの作成 36driver = webdriver.Chrome(executable_path=driver_path) 37 38# 要素が見つからない場合は10秒待つように設定 39driver.implicitly_wait(10) 40 41 42 43# www.google.co.jpを開く 44driver.get("https:XX") 45driver.maximize_window() 46 47 48driver.find_element(By.ID,"username").send_keys("XX") 49 50driver.find_element(By.ID,"password").send_keys("XX") 51 52driver.find_element(By.ID,"btn-login-employee").click() 53driver.maximize_window() 54 55 56 57driver.find_element(By.LINK_TEXT, "マスタ").click() 58 59#以下、コメントアウトしている部分が、動かない 60 61#main_menu_box = driver.find_element(BY.XPATH,'//li[text()="マスタ-1"]') 62#マウスオーバーを使うための宣言みたいなもの 63#actions = ActionChains(driver) 64#マウスオーバー処理 65#actions.move_to_element(main_menu_box).perform() 66 67#以下、3段階目のメニューの処理へ進む 68driver.find_element(By.LINK_TEXT, "見込顧客マスタメンテ").click() 69 70・・・処理続く 71 72---------------------- 73サイトのHTMLの部分 74 75 <li class="dropdown hide-lv1-menu open"> 76 <a id="dLabel" role="button" data-toggle="dropdown" data-target="#" href="https://XX/e001q#" aria-expanded="true">マスタ<span class="caret"></span></a> 77 <ul class="dropdown-menu multi-level" role="menu" aria-labelledby="dropdownMenu"> 78 <li class="dropdown-submenu"><a tabindex="-1" href="https://XX/e001q#" style="border-left-color: rgb(255, 255, 255);">マスタ-1</a> 79 <ul class="dropdown-menu" style="display: block;"> 80 <li><a href="https://XX/m101i" style="border-left-color: rgb(255, 255, 255);">見込顧客マスタメンテ</a></li> 81 <li><a href="https://XX/m102i" style="border-left-color: rgb(255, 255, 255);">顧客マスタメンテ</a></li> 82 <li><a href="https://XX/m102q" style="border-left-color: rgb(255, 255, 255);">顧客マスタ検索</a></li> 83 84

試したこと

Xpathを様々に書き換えて試した
1層目の選択肢をクリックした後、同じ1層目の別の選択肢をクリックするようにしても、動かないので、1層目の選択肢をクリックした段階で、何かが変わっているのかもしれない。

ここに問題に対して試したことを記載してください。

補足情報(FW/ツールのバージョンなど)

ここにより詳細な情報を記載してください。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

otn

2023/01/02 17:11

マウスオーバーで変化すると言うことはJavaScriptによる物でしょうから、JavaScriptを読めば良いのではないでしょうか。
takFF

2023/01/03 00:11

ありがとうございます。 試してみたいと思います。 一応、ログイン後にマウスオーバーせずに、最終的に目的とするリンク先へ飛ぶ形で、解決できました。
otn

2023/01/03 02:02 編集

行き先が固定URLだったのですね。 「どのページから来たか」はチェックされている可能性がありますが、「そのページからどうやって来たか」は多分チェックできないので(パラメーターが付加されていれば別ですが)、いきなり飛べば良いですね。
takFF

2023/01/07 14:13

ありがとうございます。まだまだ未熟ですので、引き続き勉強していきたいと思います。
guest

回答1

0

自己解決

57行
driver.find_element(By.LINK_TEXT, "マスタ").click()
#以下、3段階目のメニューの処理へ進む
driver.find_element(By.LINK_TEXT, "見込顧客マスタメンテ").click()

の部分を、
time.sleep(2)
driver.get("https:見込顧客マスタメンテをクリックして飛ぶ先のURL")
に書き換えることで、解決できました。

投稿2023/01/03 00:15

takFF

総合スコア14

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問