Как заполнить поля ввода веб-формы с помощью delphi XE3?

Мне нужно знать, как заполнить веб-форму с помощью Delphi XE3? У меня есть веб-форма с именем пользователя и паролем, как ее заполнить программно?

Страница http://batelco.com/portal видна только два ввода имени пользователя и передачи, поэтому как заполнить и передать их?


person Dreamer64    schedule 26.04.2013    source источник
comment
Возможно, вам не нужно его заполнять, а нужно только разместить? если форма не включает капчу или аналогичную разовую защиту, вы можете отправлять результаты, даже не загружая формы.   -  person Arioch 'The    schedule 26.04.2013
comment
Вам определенно не следует использовать элемент управления TWebBrowser и заполнять форму программно, если вам нужно только сделать простой HTTP-запрос POST или GET в фоновом режиме.   -  person Andreas Rejbrand    schedule 26.04.2013
comment
@AndreasRejbrand кажется, что он запускает последовательность входа пользователя. Учитывая, как редко страницы WWW используют стандартную HTTP-аутентификацию, страница, вероятно, делает какие-то странные вещи с UTL, куки, скрытыми формами или бог знает что. В этих обстоятельствах POST-логин / пароль не составит труда, но понимание того, как была произведена аутентификация и как ее следует передать на более поздние страницы, будет отдельным и довольно сложным вопросом. Итак, загрузка страницы, вероятно, потребовалась бы в MSIE, как это делает MS или какой-либо другой движок, но все же.   -  person Arioch 'The    schedule 26.04.2013
comment
веб-страница, которую я пытаюсь использовать, не имеет капчи, это веб-страница моего интернет-провайдера, базовое имя пользователя и пароль для входа в мою учетную запись и проверки, сколько загрузок я использовал, поэтому я пытаюсь сделать и приложение который автоматически регистрирует и отображает использованные загрузки, вот и все   -  person Dreamer64    schedule 26.04.2013
comment
Можете ли вы включить в свой вопрос HTML-код для формы входа? Решение зависит от метода аутентификации, поэтому это будет очень полезно.   -  person mjn    schedule 26.04.2013
comment
здесь и перейдите на страницу batelco.com/portal, увидите только два имени пользователя ввода и передайте, как заполнить и передать их?   -  person Dreamer64    schedule 26.04.2013
comment
См. Здесь дополнительные подсказки о программной отправке данных в формы ASP: stackoverflow.com/questions/10338763/   -  person mjn    schedule 26.04.2013
comment
@MS, когда вы добавляете больше деталей - делайте это самим вопросом, а не спрятанным глубоко за множеством комментариев!   -  person Arioch 'The    schedule 26.04.2013


Ответы (2)


Используя класс клиента HTTP Internet Direct (Indy), вы можете отправлять значения формы на сервер с помощью HTTP POST.

Клиент Indy HTTP также будет получать и хранить файлы cookie, которые сервер отправляет вместе со своим ответом, если экземпляр класса TIdCookieManager был назначен клиентскому компоненту IdHTTP.

Файлы cookie HTTP требуются для многих защищенных веб-приложений, когда клиент выполняет дальнейшие HTTP-запросы к другому защищенному URL-адресу на сервере. Затем клиент Indy HTTP отправит файлы cookie с запросом (если компоненту клиента IdHTTP назначен TIdCookieManager).

Таким образом, вы можете отправить запрос POST на вход по URL-адресу входа, предоставив необходимую информацию для аутентификации, а затем отправить запрос GET на URL-адрес статистики загрузки, чтобы получить его HTML.


Что касается вашей конкретной формы входа, в которой используется ASP, вот вопрос о программной отправке запросов POST: Как справиться с загадочными скрытыми значениями для ASP Net (__VIEWSTATE)

person mjn    schedule 26.04.2013
comment
Человек даже не может понять, какая страница на самом деле является формой входа, и вы предлагаете ему обрабатывать междоменные файлы cookie и выполнять ручной синтаксический анализ составных междоменных страниц. Хотя это должно быть наиболее эффективным способом, я не думаю, что он сможет это сделать. - person Arioch 'The; 26.04.2013
comment
@ Arioch'Я нигде не упоминал и не предлагал междоменную обработку файлов cookie - person mjn; 26.04.2013
comment
вы этого не сделаете, но эта страница использует форму входа для совершенно другого домена, cookie, установленный во время входа в систему, скорее всего, должен использоваться в исходном домене. - person Arioch 'The; 26.04.2013
comment
@ Arioch 'Для идентификации сеанса (а это то, что нужно форме входа в систему на стороне сервера), кроссдоменные файлы cookie - это наименьшее, что я, вероятно, ожидал - как серверы будут обмениваться идентификатором сеанса в файле cookie и соотносить его с пользователем ? Поэтому я думаю, что форма входа и аутентифицированные (защищенные) ресурсы находятся на одном сервере в одном домене. - person mjn; 30.04.2013
comment
надеюсь, вы правы. Если все дополнительные услуги предоставляются через FRAME / IFRAME. Однако я помню такие домены, как borland.com/borland.ru или сегодня google.com/google.ru - person Arioch 'The; 30.04.2013

В этой статье показано, как получить и установить свойства именованных элементов.

Вы должны получить и установить value свойства. Какие идентификаторы будут иметь элементы формы, зависит от вашей страницы.

Проверить, имеет ли элемент с идентификатором значение


В этой статье, несмотря на вопрос «как читать», также описывается, как получать значения и как их устанавливать. В конце концов, если вы можете сделать A := B (читать значение), вы, вероятно, также можете сделать B := A (установить значение).

читать содержимое в поле ввода веб-браузера


Теперь, когда URL-адрес страницы указан в вопросе, мы можем щелкнуть правой кнопкой по элементам формы входа в правом верхнем углу в браузере WWW и выбрать «Проверить элемент», чтобы увидеть его источники. Или, если браузер несовременен и в меню нет команды «Проверить», мы можем использовать другую рекомендацию, например View page source, и найти форму в источниках всей страницы. Например, одним из этих элементов является

<input name="txtUsername" type="text" maxlength="15"
 id="txtUsername" tabindex="1" class="inpu-field" onfocus="txtfocus();"
 onblur="txtblur();" style="color: gray; background-image: none;">

Таким образом, мы знаем идентификатор 1-го элемента формы, атрибут «значение» которого нам нужно получить (прочитать) или установить (записать). Ссылки выше показывают, как это сделать, учитывая известный идентификатор.

Кстати, вы неправильно указали свою страницу, настоящая страница - это https://www.e-services.com.bh/Eservices/login_batelco.aspx

Что касается вашей исходной страницы, она просто не работает с MSIE6, который является TWebBrowser в режиме по умолчанию - для совместимости со всеми написанными приложениями, использующими компонент Microsoft ActiveX. См. https://imgur.com/ad4wbOI.

Если можно использовать Google Chrome вместо TWebBrowser. Или вы можете получить доступ к интерфейсу ActiveX как одно из свойств TWebBrowser, получить новый интерфейс и отключить совместимость с MSIE6 http://msdn.microsoft.com/en-us/library/aa752510.aspx

Однако «как сделать так, чтобы эта страница отображалась в twebbrowser» - это еще один новый вопрос, а не тот, который вы здесь задавали.


На самом деле, единственная причина, по которой я не голосую за закрытие этого вопроса как дублирующего, заключается в том, что ни в одной из вышеперечисленных статей не указано "установить", "написать" или "заполнить" заголовок, поэтому найти их было немного сложнее, чем тривиально.


Но если страница не изменяется при загрузке и не имеет какой-либо одноразовой защиты, такой как CAPTCHA или уникальные хэш-коды формы, то вы можете опубликовать все значения с помощью одного HTTP-запроса, даже не загружая форму.

person Arioch 'The    schedule 26.04.2013
comment
Покажи мне, как ?? кстати, часть имени пользователя и пароля не может отображаться в twebbrowser! как это читать! - person Dreamer64; 26.04.2013
comment
Если их нельзя показать, то это другой вопрос. Если ваш пользователь не видит, где нажать и ввести текст - значит, вам нечего читать. Сделайте отдельный вопрос, как загрузить эту страницу в Delphi + MSIE. Или вы можете использовать Delphi + Chrome или Delphi + THTMLViewer - person Arioch 'The; 26.04.2013
comment
если я использую Internet Explorer, это не проблема, но если я использую twebbrowser Delphi, это не так !! вот где возникает проблема! - person Dreamer64; 26.04.2013
comment
тогда это другая проблема, а не как читать значения после того, как пользователь ввел их, а как отобразить эту страницу в TWebBrowser, чтобы пользователь мог это сделать. Это другой вопрос. Также попробуйте проверить эту страницу в MSIE6, я немного напомню, что по умолчанию TWebBrowser работает в режиме MSIE6, а не в современном режиме, ради совместимости. Если ваш сайт несовместим с MSIE6 - то, возможно, в этом проблема. Возможно, это msdn.microsoft.com/en-us/library/aa752510.aspx - person Arioch 'The; 26.04.2013