Определенно нет, и это потому, что ни Mechanize или Nokogiri запустить 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