以编程方式从网站保存网页的innerText

时间:2012-02-25 03:28:55

标签: c# .net html web

我正在使用Google的Apex系统进行在线课程,并希望能够自动保存某些页面的数据。正常浏览时登录和访问内容的过程如下:打开webapp并登录,导航我要查看的课程,单击课程。当我点击我想要的课程时,它会打开一个带有课程的新窗口。这是我无法用程序完成的部分。

我想到的第一种方法是使用PHP,请求网页并简单地保存它们。问题是有一个登录,以及一些我不知道如何使用php自动化的javascript事件和事情。我已经通过POST请求登录,但无法完成其余的工作。

今天我尝试使用dotnet WebBrowser控件使用Windows Forms,C#。我让它登录并导航到我需要选择要打开的课程的页面,但是如果我单击该链接,它会尝试在Internet Explorer中打开该网页。如果我使用它打开的链接,我会从网站收到错误。

检查我遇到问题的页面上的链接,我发现了打开新窗口的javascript事件。它通过重定向链接打开它。在新标签中使用此重定向链接而不是在Chrome中使用新窗口,但我不知道如何从C#获取重定向链接。 a元素位于iframe中,我必须在那里获取链接。 How can I, in C#, retrieve an element from within an iframe?

另外,有更好的方法吗?

1 个答案:

答案 0 :(得分:1)

使用WebClient类获取网址的HTML。

示例1:

string htmlTd;

        using (WebClient client = new WebClient())
        {
         //or - request.UserAgent = "Mozilla/5.0 (Windows; U; MSIE 9.0; WIndows NT 9.0; en-US)"; 
         client.Headers[HttpRequestHeader.UserAgent] = "Mozilla/5.0 (Windows; U; Windows NT 6.1; en-US; rv:1.9.2.13) Gecko/20101203 Firefox/3.6.13";
         htmlTd = client.DownloadString(myurl);
        }

       GetImagesInHTMLString(htmlTd);

//从页面获取图片...由于我的修改,它现在有问题...  我正在努力,但帮助你实现目标..

 private void GetImagesInHTMLString(string htmlString)
    {

        List<string> images = new List<string>();
        string pattern = @"<(img)\b[^>]*>";

        Regex rgx = new Regex(pattern, RegexOptions.IgnoreCase);
        MatchCollection matches = rgx.Matches(htmlString);
         string b =@"src=""";
         string c=@"src="""+myurl+"";

         //if (matches.Count >1)
         //{
            for (int i = 0, l =matches.Count; i < l; i++)
             {


                 string pattern1 =@"s/\s*src='[^']*'//";
                 //    images.Add(matches[i].Value.Replace(b, c));
                 string allmatch = matches[i].Value.Replace(b, c);
                string patrern1="#(= src=['\"].+[^\"]?)?src=[\"']?([^\"']+)#i";  
                 Regex rgx1 = new Regex(pattern1);
                 MatchCollection matches1 = rgx1.Matches(allmatch);
                 string siya = matches1[0].Value.ToString();
                 //string b = @"src=""";
                 //string c = @"src=""" + myurl + "";
             }
        // }       

        foreach (var item in images)
        {
            Response.Write(item);
        }        
    }

WebClient类链接示例:

WebClient client = new WebClient ();

        // Add a user agent header in case the 
        // requested URI contains a query.

        client.Headers.Add ("user-agent", "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.2; .NET CLR 1.0.3705;)");

        Stream data = client.OpenRead (URl);
        StreamReader reader = new StreamReader (data);
        string s = reader.ReadToEnd ();
        Console.WriteLine (s);
        data.Close ();
        reader.Close ();