質問: driver.find_element_by_xpath('リストのxpath') # 1回目 actions.move_to_element(target_list).perform() driver.find_element_by_xpath("XXXX").click() # 任意のメニューを選択 driver.find_element_by_xpath("XXXX").click() # 表示された画面を閉じる # 2回目 actions.move_to_element(target_list).perform() driver.find_element_by_xpath("XXXX").click() # 任意のメニューを選択 driver.find_element_by_xpath("XXXX").click() # 表示された画面を閉じる driver.quit() # ---------------------------------------------------------------------------------------------------- ``` ### 補足情報(FW/ツールのバージョンなど) OS:Windows10 1909 言語:Python 3.7.3 ブラウザ:Firefox 78.0.2(64bit) WEBドライバー:geckodriver.exe 0.26.0(64bit)
回答: 自己解決したので方法を記載しておきます。 結論から言うと、ActionChainsモジュールのインスタンスを生成後、 reset_actions()メソッドを呼び出し、保存されているアクションを逐一 解放してあげることで、同じ処理を複数回行うことができるようになりました。 ■参考:非公式リファレンス「Selenium Python Bindings 2」 例として、質問文内の「該当のソースコード」の該当処理部分を 以下のように変更することで、コードの最後まで実行が可能となりました。 ``` ## ホバーでメニューが表示されるドロップダウンリスト操作 target_list = driver.find_element_by_xpath('リストのxpath') # 1回目 actions = ActionChains(driver) actions.move_to_element(target_list).perform() driver.find_element_by_xpath("XXXX").click() # 任意のメニューを選択 driver.find_element_by_xpath("XXXX").click() # 表示された画面を閉じる # 2回目 actions = ActionChains(driver) actions.reset_actions() # キューに溜められたアクションを解放 actions.move_to_element(target_list).perform() driver.find_element_by_xpath("XXXX").click() # 任意のメニューを選択 driver.find_element_by_xpath("XXXX").click() # 表示された画面を閉じる ``` ※ 1回目の実行前のリセットは必要ありません。 ※ 各実行ごとにインスタンスの生成(actions = ActionChains())を入れないとエラーとなります。