在C#中从网站上读取数据

时间:2016-04-01 13:00:57

标签: c#

        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。

登录后的页面上,

enter image description here

我希望程序单击Timetable元素。但它并没有自己的身份。我怎样才能访问它?

这甚至是一种正确的方法吗?我怎样才能达到我想要的目标?我自己也做不到,所以我把这个问题放在这里!

3 个答案:

答案 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");
        }
    }