web-dev-qa-db-ja.com

webdriverを介してjavascriptポップアップをクリックします

PythonでSelenium Webdriverを使用してWebページをスクレイピングしています

私が取り組んでいるウェブページにはフォームがあります。フォームに入力した後、[送信]ボタンをクリックします。

ポップアップウィンドウ(Javascript Alert)を生成します。 Webdriverでポップアップをクリックする方法がわかりません。

それを行う方法はありますか?

ありがとう

17
Kiran

Python Webdriverスクリプト:

from Selenium import webdriver

browser = webdriver.Firefox()
browser.get("http://sandbox.dev/alert.html")
alert = browser.switch_to_alert()
alert.accept()
browser.close()

Webページ(alert.html):

<html><body>
    <script>alert("hey");</script>
</body></html>

Webdriverスクリプトを実行すると、警告を示すHTMLページが開きます。 Webdriverはすぐにアラートに切り替えてそれを受け入れます。その後、Webdriverはブラウザを閉じて終了します。

アラートがあるかどうかわからない場合は、このようなエラーをキャッチする必要があります。

from Selenium import webdriver

browser = webdriver.Firefox()
browser.get("http://sandbox.dev/no-alert.html")

try:
    alert = browser.switch_to_alert()
    alert.accept()
except:
    print "no alert to accept"
browser.close()

アラートのテキストを確認する必要がある場合は、アラートオブジェクトのテキスト属性にアクセスして、アラートのテキストを取得できます。

from Selenium import webdriver

browser = webdriver.Firefox()
browser.get("http://sandbox.dev/alert.html")

try:
    alert = browser.switch_to_alert()
    print alert.text
    alert.accept()
except:
    print "no alert to accept"
browser.close()
25
Mike Grace
from Selenium import webdriver
from Selenium.webdriver.support import expected_conditions as EC

driver = webdriver.Firefox()
#do something
if EC.alert_is_present:
    print "Alert Exists"
    driver.switch_to_alert().accept()
    print "Alert accepted"
else:
    print "No alert exists"

Excepted_conditionsの詳細 https://seleniumhq.github.io/Selenium/docs/api/py/webdriver_support/Selenium.webdriver.support.expected_conditions.html

私はRubyバインディングを使用していますが、ここでSeleniumで見つけたものPython Bindings 2のドキュメント: http://readthedocs.org/docs/Selenium -python/en/latest/index.html

Selenium WebDriverには、ポップアップダイアログボックスを処理するためのサポートが組み込まれています。トリガーしてポップアップを開くアクションを実行したら、次の方法でアラートにアクセスできます。

alert = driver.switch_to_alert()

今、私はあなたがそのようなことをすることができると思います:

if alert.text == 'A value you are looking for'
  alert.dismiss
else
  alert.accept
end

それが役に立てば幸い!

1
Yulia

それが何であるかに関係なく、ポップアップを承認またはクリックする場合

_alert.accept
_

ここで、alertはクラスSelenium.webdriver.common.alert.Alert(driver)のオブジェクトであり、acceptはそのオブジェクトのメソッドです

ソース

1
Gaurav Gandhi

そのような関数がない場合にフォームの送信を処理するjavascript関数に依存しますpostを使用してフォームを送信しようとします

0
simonzack