private void webBrowser1_DocumentCompleted(object sender, WebBrowserDocumentCompletedEventArgs e)
{
try
{
HtmlDocument doc = logger.Document;
HtmlElement username = doc.GetElementById("loginUsername");
HtmlElement password = doc.GetElementById("loginPassword");
HtmlElement submit = doc.GetElementById("loginSubmit");
username.SetAttribute("value", "myusername");
password.SetAttribute("value", "mypassword");
submit.InvokeMember("click");
}
catch
{
}
}
您好,我正在尝试制作一个可以登录网站的程序,并阅读一些文本以将其显示给用户。通过上面的代码,到目前为止,我已经自动登录了webbrowser。
登录后的页面上,
我希望程序单击Timetable元素。但它并没有自己的身份。我怎样才能访问它?
这甚至是一种正确的方法吗?我怎样才能达到我想要的目标?我自己也做不到,所以我把这个问题放在这里!
答案 0 :(得分:1)
从MSDN页面看,您的选项似乎有限。
您可以尝试使用Selenium代替它。它将允许您的应用程序与Web组件交互,并通过ID,XPath和CSS选择器使用它们,这将允许您比您当前使用的更灵活。
Selenium带有自己的C#包装器。 This教程可以帮助你。
答案 1 :(得分:1)
您不需要点击按钮,因为您有URL。您可以直接调用URL并读取已返回的代码:
var req = (HttpWebRequest)WebRequest.Create(URL);
req.Method = "GET";
var resp = req.GetResponse();
using(var sr = new StreamReader(resp.GetResponseStream(), System.Text.Encoding.UTF8))
{
string result = sr.ReadToEnd();
}
myResponse.Close();
如果您使用Fiddler等工具,则可以看到返回的数据。
答案 2 :(得分:0)
就在这里。只是一些foreach代码。
bool login = false;
bool nav = false;
bool beware = true;
private void webBrowser1_DocumentCompleted(object sender, WebBrowserDocumentCompletedEventArgs e)
{
try
{
HtmlDocument doc = webBrowser1.Document;
if (login && !nav)
{
HtmlElement timetable = null;
foreach (HtmlElement link in doc.GetElementsByTagName("li"))
{
Console.WriteLine(link.InnerText);
if (beware)
{
timetable = link; //Avoiding NullExceptions
}
if (link.InnerText.Contains("Timetablelol"))
{
timetable = link; //Set the Timetable var.
beware = false; //Keep Timetable the kept element.
}
}
timetable.InvokeMember("click"); //Clicking on timetable link.
nav = true;
}
if (!login && !nav)
{
HtmlElement username = doc.GetElementById("loginUsername");
HtmlElement password = doc.GetElementById("loginPassword");
HtmlElement submit = doc.GetElementById("loginSubmit");
username.SetAttribute("value", "myusername");
password.SetAttribute("value", "mypassword");
submit.InvokeMember("click");
login = true;
}
}
catch
{
Console.WriteLine("Didn't work");
}
}