通过程序保存网站中网页的innerText

本文关键字:网页 innerText 中网 网站 过程 程序 保存 | 更新日期: 2023-09-27 18:25:41

我正在用谷歌的Apex系统上一个在线课程,希望能够自动保存某些页面的数据。正常浏览时登录和获取内容的过程如下:打开网络应用程序并登录,浏览我想要查看的课程,点击课程。当我单击要学习的课程时,它会打开一个包含课程的新窗口。这是我在程序中无法完成的部分。

我想到的第一种方法是使用PHP,请求网页并简单地保存它们。问题是有一个登录,还有一些javascript事件和我不知道如何用php自动化的事情。我甚至用POST请求登录,但无法解决其余问题。

今天,我尝试使用Windows窗体C#,使用dotnet WebBrowser控件来完成此操作。我让它帮我登录并导航到我需要选择要打开的课程的页面,但如果我单击链接,它会尝试在Internet Explorer中打开网页。如果我使用它打开的链接,我会从网站上得到一个错误。

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

还有,有更好的方法吗?

通过程序保存网站中网页的innerText

使用WebClient类获取url的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 ();