絶対にありません、とMechanizeのか鋸山でもないが、Javascriptを実行するためです。
代わりにSeleniumを使用できます。このような
何か:
require 'selenium-webdriver'
class AlertChecker
Driver = Selenium::WebDriver.for :firefox
def initialize(url)
Driver.navigate.to url
end
def raise_alert(text)
Driver.execute_script "alert('#{text}')"
self
end
def safely_get_alert
begin
Driver.switch_to.alert
rescue Selenium::WebDriver::Error::NoAlertOpenError
end
end
end
使用法:
alert_checker = AlertChecker.new("http://my.website")
alert = alert_checker.safely_get_alert
# => nil
alert_checker.raise_alert("hack")
alert = alert_checker.safely_get_alert
puts alert.text
# => 'hack'
# As far as I'm aware Selenium doesn't have a built-in way
# to tell you if it's an alert, confirm, or prompt.
# But you know it's a prompt, for example, you could also send
# keys before accepting or dismissing
alert.accept
alert = alert_checker.safely_get_alert
# => nil
アラートのセレンの取扱いといくつかのトリッキーなものががあります。
rescue
またはtry
のようなものを使用せずに、コードがタイプ(プロンプト、確認、アラート)を検出する方法はありません。すべてはswitch_to.alert
によって達成されます。
また、ブラウザにアラートが開いている場合は、アラートを処理しない限り、後続のコマンドを実行できません。アラートが開かれている間にnavigate.to
を試してみてください。 の警告にはエラーが発生します。のアラートは処理されず、navigate.to
コマンドを再実行する必要があります。このエラーが発生すると、アラートオブジェクトも失われます。
それは、このように制御構造として救助を使用するために少し魅力がないのですが、私は他のオプション
これはどうでしょうか?htmlで見つける方法はありますか?同様に、解析するスクリプトタグがありますか? – papasmurf
おそらく、XSSが発生するのを知るための最も簡単な方法は、Javascriptを実行することです(Nokogiri/Mechanizeを使用することはできません)。 –
ええ、これは簡単だとは思わなかった – papasmurf