Ну, если бы вы работали с разработчиками сайта над созданием решения для вашего приложения, то вы бы использовали ObjectForScripting
для связи между JavaScript и приложением. Есть хорошая статья здесь и еще один вопрос, который может быть полезен здесь .
Однако, как я понимаю ваш вопрос, сайт является произвольным сторонним сайтом, не связанным с вашим приложением, и вы хотите автоматически заполнить некоторые значения формы и отправить форму в своем коде.
Для этого вы можете обработать событие LoadCompleted
WebBrowser. Вызывается, когда загруженный документ readyState
изменяется на завершенный. Поэтому вы можете использовать это событие как ловушку для установки / чтения значений формы документа. Обратите внимание, что вам нужно будет добавить ссылку на Microsoft mshtml
в проекте.
Ниже приведена команда в стиле MVVM (PRISM), которая позволяет событию привязываться непосредственно к ViewModel
с использованием поведений. Это эквивалентно регистрации обработчика события в коде позади.
public ICommand LoadCompleted
{
get
{
return new EventToCommandWithSender<NavigationEventArgs>(
(s,e) => {
WebBrowser browser = (WebBrowser) sender;
// false if nested frame
if (e.IsNavigationInitiator)
{
mshtml.IHTMLDocument2 doc = (mshtml.IHTMLDocument2)browser.Document;
// always completed
var readyState = doc.readyState;
// populate form
var name = doc.body.document.getElementById("username");
name.value = "@TheCodeKing";
// submit form
var submit = doc.body.document.getElementById("submit");
submit.Click();
}
});
}
}
К сожалению, NavigationEventArgs
не предоставляет способа доступа к документу HTML или запроса данных. Он содержит свойство WebRequest
, но оно не было реализовано и всегда будет нулевым. В моем примере я использовал пользовательский класс EventToCommandWithSender
, который предоставляет отправителю, а также ARG события при возникновении события, но только ваша собственная реализация может получить доступ к отправителю.