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

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

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

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

selenium

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

Q&A

解決済

2回答

16537閲覧

selenium、ボタンをクリックして、モーダルウインドウを消したい。

hiranohirano

総合スコア33

Python 3.x

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

selenium

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

0グッド

1クリップ

投稿2019/09/08 09:00

前提・実現したいこと

python3、seleniumを使って、モーダルウインドウを消したいです。

こちらのURLにアクセスした時に出る、
モーダルウィンドウのボタンをクリックし、ウィンドウを消したいです。
具体的には、「本ウェブサイトはクッキーを利用します」というウィンドウで、「続行する」というボタンを押したいです。

該当のソースコード

python

1from selenium import webdriver 2from time import sleep 3 4driver = webdriver.Chrome() 5 6driver.get("https://mt4.xmtrading.com/") 7sleep(5) 8btn = driver.find_element_by_xpath('//*[@id="cookieModal"]/div/div/div[1]/div[2]/div[2]/div/button') 9btn.click() 10

試したこと

1.Xpathで要素を見つけてクリックする。
コードは上記の通りです。
→エラーはでないが、モーダルウインドウも消えない。

2.クリックする要素をbuttonからdivに変える
→エラーはでないが、モーダルウインドウも消えない。

3.iframeに移動後、要素を見つけてクリックする。
→NoSuchElementException
iframe内に書かれているわけではないので、当然ですが。。

4.ActionChainsを使って、要素へ移動した後、クリックする

python

1from selenium import webdriver 2from time import sleep 3from selenium.webdriver.common.action_chains import ActionChains 4 5driver = webdriver.Chrome() 6 7driver.get("https://mt4.xmtrading.com/") 8sleep(3) 9 10btn = driver.find_element_by_xpath('//*[@id="cookieModal"]/div/div/div[1]/div[2]/div[2]/div/button') 11actions = ActionChains(driver) 12actions.move_to_element(btn) 13actions.click() 14actions.perform()

→エラーはでないが、モーダルウインドウも消えない。

5.switch_to_alertを使う

python

1alert = driver.switch_to_alert() 2alert.accept()

→NoAlertPresentException: Message: no such alert

6.switch_to.windowを使う

python

1driver.switch_to.window(driver.window_handles[1])

→IndexError: list index out of range
新しいウィンドウが開かれているわけではない。

7.こちらのページを参考に、以下の1行を追加し、スクロールした後に要素をクリック。

python

1driver.execute_script("window.scrollTo(0, document.body.scrollHeight);") #こちらの1行を追加 2btn = driver.find_element_by_xpath('//*[@id="cookieModal"]/div/div/div[1]/div[2]/div[2]/div/button') 3btn.click()

→エラーはでないが、モーダルウインドウも消えない。

8.クリックではなく、Escapeキーを押す

python

1from selenium.webdriver.common.keys import Keys 2 3actions = ActionChains(driver) 4actions.send_keys(Keys.ESCAPE).perform()

→エラーはでないが、モーダルウインドウも消えない。

色々試しましたが、解決方法がわかりません。
お分かりになる方がおりましたら、何卒宜しくお願い致します。

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

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

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

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

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

guest

回答2

0

ベストアンサー

driver.execute_script('document.getElementsByClassName('js-saveCookie')[0].click()')

投稿2019/09/08 10:14

shirai

総合スコア1290

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

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

hiranohirano

2019/09/08 10:22

ご回答いただきありがとうございます。 こちらのコードで出来ました。javascriptで要素を取得してクリックまですれば良かったのですね。 ありがとうございました!
guest

0

クラス名:btn btn-red btn-solid btn-block js-acceptDefaultCookie
で要素を取得してみてはどうでしょうか?

1つ目の要素が対象の要素かと思われます。

投稿2019/09/08 09:17

編集2019/09/08 09:19
meg_

総合スコア10580

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

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

hiranohirano

2019/09/08 09:30

ご回答いただきありがとうございます。 btn = driver.find_element_by_class_name('js-acceptDefaultCookie') btn.click() としてみました。エラーはでないのですが、モーダルウィンドウは消えませんでした。 xpathで取得せずに、クラス名で取得したほうが良いのでしょうか?
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問