#javascript #vba #ms-access
#javascript #vba #ms-access
Вопрос:
Я в тупике. У меня есть код vba, который заполняет поля формы веб-сайта и в течение многих лет успешно нажимал кнопку продолжения внизу страницы. Недавно веб-сайт внес изменения, которые сорвали этот последний шаг — нажатие кнопки продолжить.
HTML-код для кнопки теперь читается как:
<input type="submit" name="PaymentProcessor$ButtonContinue" value="Confirm" onclick="javascript:PaymentProcessor_ButtonContinue.disabled=true;__doPostBack(amp;#39;PaymentProcessor$ButtonContinueamp;#39;,amp;#39;amp;#39;);WebForm_DoPostBackWithOptions(new WebForm_PostBackOptions(amp;quot;PaymentProcessor$ButtonContinueamp;quot;, amp;quot;amp;quot;, true, amp;quot;amp;quot;, amp;quot;amp;quot;, false, false))" id="PaymentProcessor_ButtonContinue" class="btn btn-default" style="font-weight:normal;font-style:normal;text-decoration:none;" />
В прошлом я определял ieObj как HTMLInputElement и нажимал кнопку следующим образом:
Set ieObj = iePage.getElementById("PaymentProcessor_ButtonContinue")
ieObj.Click
Теперь это больше не работает. Я не получаю сообщение об ошибке, ничего не происходит. Я вижу, что ieobj заполняется в окне locals, поэтому я думаю, что у меня правильный дескриптор, я просто не могу манипулировать объектом.
Я также попробовал следующее:
ieObj.FireEvent ("onkeypress")
''no error, no effect
ieObj.FireEvent ("doPostBack")
''error
ieObj.submit
''error- does not support method
ieObj.Value = "continue"
''no error, no effect
ieObj.Value = "confirm"
''no error, no effect
Я также пытался напрямую вызвать часть javascript этого html, но, вероятно, я делаю это неправильно:
iePage.parentWindow.execScript "document.getElementById('PaymentProcessor_ButtonContinue').submit();", "javascript"
''gives automation error
iePage.parentWindow.execScript "__doPostBack(amp;#39;PaymentProcessor$ButtonContinueamp;#39;,amp;#39;amp;#39;);WebForm_DoPostBackWithOptions(new WebForm_PostBackOptions(amp;quot;PaymentProcessor$ButtonContinueamp;quot;, amp;quot;amp;quot;, true, amp;quot;amp;quot;, amp;quot;amp;quot;, false, false));", "javascript"
''gives automation error
Я попытался использовать queryselector и queryselectorall, но оба метода привели к сбою Access.
В другом месте страницы определены приведенные ниже функции javascript. Я не знаю, важно ли это, но это ниже:
<script type="text/javascript">
//<![CDATA[
var theForm = document.forms['Form1'];
if (!theForm) {
theForm = document.Form1;
}
function __doPostBack(eventTarget, eventArgument) {
if (!theForm.onsubmit || (theForm.onsubmit() != false)) {
theForm.__EVENTTARGET.value = eventTarget;
theForm.__EVENTARGUMENT.value = eventArgument;
theForm.submit();
}
}
//]]>
</script>
Есть идеи, которые я должен попробовать?
Комментарии:
1. Частная веб-страница / за логином?
2. Да, это около 5 страниц вглубь веб-сайта обработки платежей.
3. Я думаю, вам следует просмотреть обратную отправку и т. Д. Следующим образом: __doPostBack(‘PaymentProcessor $ButtonContinue’,»»);WebForm_DoPostBackWithOptions(new WebForm_PostBackOptions(«PaymentProcessor $ ButtonContinue», «», true, «», «», false, false)) и некоторую предысторию в последней части: learn.microsoft.com/en-us/dotnet/api /…
4. Вы также пробовали iePage.parentWindow.execScript «document.getElementById(‘PaymentProcessor_ButtonContinue’).click();», «javascript»
5. Я попробовал iePage.parentWindow.execScript «document.getElementById(‘PaymentProcessor_ButtonContinue’).click();», «javascript» по вашему предложению. Ошибки нет, но эффекта нет. Спасибо за предложение. Я прочитал ссылку в вашем другом комментарии, но я не уверен, как использовать эту информацию,
Ответ №1:
Проверьте, является ли кнопка ввода частью формы, и вызовите процедуру отправки формы. Не зная больше об очищаемом HTML, я не могу предоставить дополнительную помощь.