Почему поле в webbrowser по-прежнему считается пустым, даже если я уже установил его значение? - PullRequest
0 голосов
/ 27 января 2019

введите описание изображения здесь Я пытаюсь автоматизировать нашу систему продажи билетов, используя Visual Basic. Однако я не могу сохранить профиль, потому что поле в веб-браузере все еще читается как пустое, даже если я уже установил его значение:

enter image description here

Я также пытался установить атрибут originalvalue, prekeyvalue и т. Д., Но все еще не работал. Но если вы вручную введете значение в поле, оно будет работать.

Мой код ниже:

WebBrowser1.Document.GetElementById("mb8a86d99-tb").SetAttribute("value", "EMAIL")

Информация поля ниже:

<input datatype="0" id="mb8a86d99-tb" aria-required="true" role="textbox" aria-labelledby="mb8a86d99-lb" class="fld text   fld fld_req" ctype="textbox" li="mb8a86d99-img" maxlength="512" style=";width:225.0px;" async="1" ae="setvalue" type="text" value="" ov="" work="1" fldinfo="{&quot;lookup&quot;:&quot;valuelist&quot;,&quot;dsid&quot;:&quot;TSDTKTSOURCE&quot;,&quot;inttype&quot;:&quot;0&quot;,&quot;afindex&quot;:&quot;0&quot;,&quot;length&quot;:&quot;512&quot;,&quot;required&quot;:true}" title="" originalvalue="" prekeyvalue="" stoptcclick="true">

enter image description here

1 Ответ

0 голосов
/ 27 января 2019

Такая проблема возникает на некоторых веб-страницах, когда form, содержащий ваш input, не активируется (это форма защиты на стороне клиента, созданная для того, чтобы избежать вставки значений программным путем).

Если вы вручную введете в него значение, form станет активным, потому что вы нажимаете на input, который является потомком form. Однако, если вы делаете это программно, активация не запускается, и поэтому значение, добавленное вами в HTML, не принимается клиентом.

Вы можете попытаться эмулировать активацию формы с помощью метода Focus на своем входе:

WebBrowser1.Document.GetElementById("mb8a86d99-tb").Focus
WebBrowser1.Document.GetElementById("mb8a86d99-tb").SetAttribute("value", "EMAIL")

Если это все еще не работает, попробуйте добавить Application.Wait(TimeSerial(Hour(Now()), Minute(Now()), Second(Now()) + 2)) между одной командой и другой, чтобы позволить форме фактически активировать себя.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...