Как нажать эту кнопку JavaScript?
В середине веб-страницы я пытаюсь войти, у меня есть следующий код
<tr>
<td colspan="2" align="center"><!--mstheme--><font face="Trebuchet MS, Arial, Helvetica">
<br>
<a href="javascript:SubmitAction()">
<IMG SRC="images/logon.gif" WIDTH="47" HEIGHT="43" NATURALSIZEFLAG="3" BORDER="0">
</a>
<!--mstheme--></font></td>
Я хочу выполнить код SubmitAction(), который примет мои учетные данные и войдет в систему. Использование WebBrowser из.NET работает нормально, потому что я могу использовать "invokescript". Я не могу сделать это с shdocvw, хотя. Как я могу щелкнуть или иным образом заставить это действие произойти, особенно если у элемента нет идентификатора или тега?
Вот как выглядит моя функция в данный момент:
private void webBrowser1_DocumentCompleted(object pDisp, ref object URL)
{
while (webBrowser.ReadyState < SHDocVw.tagREADYSTATE.READYSTATE_LOADED) { }
//we are attempting to log in
if (loggingIn)
{
mshtml.HTMLDocumentClass doc = webBrowser.Document as mshtml.HTMLDocumentClass;
doc.getElementById("Username").setAttribute("value", "MLAPAGLIA");
doc.getElementById("Password").setAttribute("value", "PASSWORD");
mshtml.IHTMLWindow2 win = doc.parentWindow as mshtml.IHTMLWindow2;
win.execScript("SubmitAction()", "javascript");
loggingIn = false;
return;
}
2 ответа
Решение
Попробуйте (РЕДАКТИРОВАТЬ после комментария):
using SHDocVw;
using mshtml;
SHDocVw.InternetExplorer ie = new SHDocVw.InternetExplorer();
ie.Visible = true;
object o = new object();
ie.Navigate("http://www.google.com", ref o, ref o, ref o, ref o);
while (!(ie.ReadyState >= tagREADYSTATE.READYSTATE_LOADED))
Application.DoEvents();
var doc = ie.Document;
var win = (IHTMLWindow2)doc.parentWindow;
// here you call the Javascript
win.execScript("SubmitAction();", "javascript");
несколько интересных ссылок:
<a href="#" onclick="SubmitAction();return(false);">
Это не идеальный способ сделать это, лучше использовать обработчик событий.
В JQuery это было бы
<a href="#" id="someid">
$('#someid').bind("click", function() { .. do whatever });
Таким образом, вы не запутываете логику кода и семантическую разметку.