Я пытаюсь переопределить функцию JS на сторонней веб-странице с целью WebScraping с использованием Selenium + ChromeDriver.
Зачем проходить через все эти неприятности, спросите вы?
В какой-то момент происходит такой вызов внутри функции JS, когда я пытаюсь нажать на кнопку «отправить форму»:
xxxx = window.showModalDialog("...");
Это просто всплывающее окно подтверждения для пользователя. Дело в том, что showModalDialog больше не поддерживается Chrome / Firefox / Edge, только IE. Могу ли я использовать IE для достижения результатов? Нет, поскольку конфигурации IEDriver для IE 11 требуется более высокий «уровень очистки» (он же привилегии администратора), чем я могу получить.
Лучшим решением было бы просто заменить приведенный выше код на:
xxxx = true;
Кнопка отправки HTML:
<button type="button" id="botaoFlatConfirmar"
onclick="if (critica("some test")
{ return Submeter('E', this, 'XXXXXXXXXX');; }" barrabotao="true" style="white-space: nowrap; ....</button>
и внутри Submeter () есть этот кусок кода:
if (abreAviso("xxxx")){ form.submit();}
Который возвращает нас к abreAviso ():
function abreAviso(msg, tipoMensagem, tituloTexto1, conteudoTexto1, tituloTexto2, conteudoTexto2, tituloTexto3, conteudoTexto3, altura, largura)
{
var retorno = false;
if (altura == null) altura = 200
if (largura == null) largura = 400
if (tipoMensagem==null) tipoMensagem = 'I'
if (tituloTexto1==null) tituloTexto1 = ''
if (conteudoTexto1==null) conteudoTexto1=''
if (tituloTexto2==null) tituloTexto2=''
if (conteudoTexto2==null) conteudoTexto2=''
if (tituloTexto3==null) tituloTexto3=''
if (conteudoTexto3==null) conteudoTexto3=''
retorno = window.showModalDialog("/XXXXXXXXXXXXX =" + msg + "&tipoMensagem=" + tipoMensagem + "&conteudoTexto1=" + conteudoTexto1 + "&conteudoTexto2=" + conteudoTexto2 + "&conteudoTexto3=" + conteudoTexto3 + "&tituloTexto1=" + tituloTexto1 + "&tituloTexto2=" + tituloTexto2 + "&tituloTexto3=" + tituloTexto3,"avisoPadrao","center:yes;dialogWidth:" + largura + "px;dialogheight=" + altura + "px;status=no;");
return retorno;
}
Могу ли я принудительно отправить форму? Нет, потому что мне нужен код проверки данных внутри Submeter () (длиной более 2000 строк);
Итак, в идеале я бы хотел переопределить abreAviso (), если это возможно.
Я прочитал много тем по StackOverflow, но не смог придумать рабочий код.
Я попытался реализовать что-то с помощью JavaScriptExecutor и не смог, потому что мне нужно запустить его после функции Submeter ().
Важная информация:
Я действительно неопытен, когда дело доходит до JS.
Я могу переопределить функцию abreAviso () вручную с помощью Chrome.
Было бы очень хорошо, если бы один из вас, ребята, мог указать мне на решение о том, как переопределить функцию, используя Selenium и C #, или предложить какой-нибудь другой инструмент / метод решения.
Заранее спасибо.