【发布时间】:2016-04-15 07:17:25
【问题描述】:
我正在尝试从我的应用程序自动登录其中一款在线浏览器游戏。但是,当我检查登录按钮时,我看到了这个 html 代码。
<div id="js_login_button">
<a href="#" onclick="$('#login_submit_button').click()" class="login_button">
<span class="button_left"></span>
<span class="button_middle">Login</span>
<span class="button_right"></span>
</a>
</div>
由于我无法访问按钮的 ID,因此无法使用
webbrowser.Document.GetElementById("button_id").InvokeMember("click");
如何调用这些按钮?
编辑:谁想知道这是哪款游戏: https://www.tribalwars.net/
<form action="index.php?action=login&show_server_selection=1" method="post" id="login_form" onsubmit="return Index.login_submit();" data-tracked="true">
<div>
<label for="user">
<strong>User name:</strong>
<span>
<input id="user" name="user" class="text" type="text" value="" onkeydown="if((e=window.event||event) && e.keyCode == 13 && $('#user').val() && $('#password').val()) $('#login_form').submit()" data-tracked="true">
</span>
</label>
<label for="password">
<strong>Password:</strong>
<span>
<input name="clear" type="hidden" value="true" data-tracked="true">
<input id="password" name="password" class="text" type="password" onkeydown="if((e=window.event||event) && e.keyCode == 13 && $('#user').val() && $('#password').val()) $('#login_form').submit()" data-tracked="true">
</span>
</label>
<input type="submit" id="login_submit_button" style="display: none" data-tracked="true">
<label for="cookie" class="remember_me">
<input id="cookie" type="checkbox" name="cookie" value="true" checked="checked" data-tracked="true">
Remember me
</label>
<div id="login-buttons">
<a id="fb-login-button" class="social-login-button" href="https://ipp-facebook.innogames.de/?game=staemme&market=en&" title="Play with Facebook"></a>
<div id="js_login_button">
<a href="#" onclick="$('#login_submit_button').click()" class="login_button">
<span class="button_left"></span>
<span class="button_middle">Login</span>
<span class="button_right"></span>
</a>
</div>
</div>
<br style="clear:both;">
</div>
</form>
在此页面上,名为 Login 的按钮具有相同的属性。
编辑 2:这是显示我尝试过(但失败)的源代码:
public Form1()
{
InitializeComponent();
browser.Navigate("https://www.tribalwars.net/"); // browser is defined in the form as a WebBrowser element
}
private void btnTest_Click(object sender, EventArgs e)
{
//var debug = browser.Document.GetElementById("login_submit_button").InvokeMember("click"); // there is a runtime null referance error here
var elements = browser.Document.GetElementsByTagName("Login");
foreach (HtmlElement element in elements)
{
// The program does not enter here, there is no element !
//element.InnerHTML to see if it's the one you want
element.InvokeMember("click");
}
}
【问题讨论】:
-
@EdPlunkett 它的窗体。
-
嗯,它不是一个按钮。这是一个锚标签。你想执行它的 onclick 事件。但是你需要先得到元素。 winforms webbrowser 控件是否有任何其他方式来枚举或访问页面中的元素?有什么方法可以枚举所有特定类型的标签?您可能需要浏览页面中的其他多少个 a 标签才能找到这个?
-
@EdPlunkett 不,我认为不是。但是从我提供的行中,我可以看到事件是如何执行的吗?没有办法打电话吗?
-
不能使用 GetElementsByTagName? stackoverflow.com/questions/5603164/… 一旦你有了元素对象,你可能会找到一种方法来调用它的 onclick 事件。
-
你能告诉我你“将登录作为标签传递”的代码吗?我很好奇这意味着什么。但是现在您已经更改了关于 Web 浏览器控件中的 HTML 的故事,试试这个,看看您会得到什么:
webbrowser.Document.GetElementById("login_submit_button").InvokeMember("click");
标签: javascript c# winforms webbrowser-control