Я пытаюсь автоматизировать тяжелую страницу javascript в Perl, используя Mechanize::PhantomJS
. Существует некоторый javascript, который выполняется на странице после того, как пользователь щелкает либо в порядке, либо отменяет подтверждение подтверждения. Так как я не знаю, как нажимать хорошо, я выполняю javascript напрямую. проблемы в том, что следующий скрипт работает нормально при использовании Firefox (здесь я использую Mechanize::Firefox
), но не дает никакого результата при использовании Mechanize::PhantomJS
eval_in_page Выполнение javascript работает в firefox, но не в phantomjs
$mech->eval_in_page(<<'JS');
closeChildWindows();
commandInProgress = true;
document.dataForm.target="_self";
document.dataForm.method='post';
document.dataForm.action="ReviewApptAction";
document.dataForm.submit();
JS
В PhantomJS, сценарий проходит через эти линии, не производя какие-либо ошибки но ничего не выполняет на странице, то есть я не получаю никакого результата, например, отправки формы в конце. Кто-нибудь знает, что здесь происходит?
Я хочу использовать Mechanize::PhantomJS
, потому что он позволяет мне запускать несколько экземпляров сценария одновременно, в отличие от firefox.
Позвольте мне быть более ясно: я должен нажать на кнопку, которая имеет OnClick Javascript прилагается к нему:
<a href="javascript:bookAppointment()" onmouseover="window.status='Next Screen';return true" onmouseout="window.status='';return true">
<img src="../images/include/buttonnext.gif" width="61" height="16" border="0" alt="Next Screen"></a>
Функция, что эта кнопка вызывает это:
function bookAppointment()
{
if (confirm("Book this appointment?"))
{
if (!commandInProgress) {
closeChildWindows();
commandInProgress = true;
document.dataForm.target="_self";
document.dataForm.method='post';
document.dataForm.action="ReviewApptAction";
document.dataForm.submit();
}
else {
alert("Request has been submitted but not yet processed by the server. Please press OK and wait for response...");
}
}
return;
}
Во-первых, я использовал $mech->confirm('Really do this?' [ => 1 ])
, чтобы щелкнуть oky в диалоговом окне подтверждения, но это не сработало. Итак, я просто выдал команды, которые следуют за щелчком.
Наконец кто-SO следует этикет (размещение в виде CW). Я никогда не использовал Perl, поэтому мне не нравится писать ответ на основе предположения. –
Ну, вы пригвоздили проблему и были прав, говоря OP, чтобы написать ответ. Я использую 'WWW :: Mechanize :: PhantomJS' прямо сейчас, поэтому я решил, что быстрее будет просто сбрасывать ответ, а не ждать OP. – ThisSuitIsBlackNot