簡體   English   中英

從C#網站讀取數據

[英]reading data off website in 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
        {

        }
    }

您好,我正在嘗試制作一個程序來登錄到網站,並閱讀一些文本以顯示給用戶。 到目前為止,使用上面的代碼,我已經使Web瀏覽器自動登錄。

登錄后在頁面上,

在此處輸入圖片說明

我希望程序單擊“時間表”元素。 但是它沒有自己的ID。 我如何獲得它?

這甚至是正確的方法嗎? 我如何在這里實現我想要的? 我自己做不到,所以我把這個問題放在這里!

MSDN頁面看來,您的選擇是有限的。

您可以嘗試使用Selenium代替。 它將允許您的應用程序與Web組件進行交互,還可以通過ID,XPath和CSS選擇器使用它們,這將使您比當前使用的靈活性更大。

Selenium帶有自己的C#包裝器。 教程將為您提供幫助。

您無需單擊按鈕,因為有了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之類的工具,則可以看到返回的數據。

它在這里。 只是一些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");
        }
    }

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM