超难问题:( 如何基于浏览器获取网站页面内容,非高手莫进!

时间:2021-01-08 14:45:36
在写一个抓取页面源代码的工具,用HttpWebRequest等模拟浏览器的方面可以获得大部分分的网站内容,可是也有不少的网站做了处理,直接HttpWebRequest等模拟浏览器的方式不能正确获得页面内容,先寻求真正基于浏览器的获取网站页面的内容的方法,熟悉这方面的朋友,请不吝赐教!

基于浏览器获得页面内容的好处?
1:可以获得任何网站的页面内容
2:可获得javascript等ajax动态生成的内容


朋友,我的问题是:
1.经试验,发现直接调用webbrouser控件可以办到,单不知道如何将其封装到一个函数里?

2.如何用c#调用ie或firefox浏览器获得网页内容?


本人已花了一个月都没搞定,救命啊~


11 个解决方案

#1


up

#2


谢谢楼上兄弟,这个问题是在太难了!

#3


帮你顶下,我顺便学习学习!

#4


#region 读取页面详细信息
        /// <summary>
        /// 读取页面详细信息
        /// </summary>
        /// <param name="url">需要读取的地址</param>
        /// <param name="EncodingType">读取的编码方式</param>
        /// <returns></returns>
        string GetURLContent(string url, string EncodingType)
        {
            try
            {
                string PetiResp = "";
                Stream mystream;
                System.Net.HttpWebRequest req = (System.Net.HttpWebRequest)System.Net.HttpWebRequest.Create(url);
                req.AllowAutoRedirect = true;
                System.Net.HttpWebResponse resp = (System.Net.HttpWebResponse)req.GetResponse();
                if (resp.StatusCode == System.Net.HttpStatusCode.OK)
                {
                    mystream = resp.GetResponseStream();
                    System.Text.Encoding encode = System.Text.Encoding.GetEncoding(EncodingType);
                    StreamReader readStream = new StreamReader(mystream, encode);
                    char[] cCont = new char[256];
                    int count = readStream.Read(cCont, 0, 256);
                    while (count > 0)
                    {
                        // Dumps the 256 characters on a string and displays the string to the console. 
                        String str = new String(cCont, 0, count);
                        PetiResp += str;
                        count = readStream.Read(cCont, 0, 256);
                    }
                    resp.Close();
                    return PetiResp;
                }
                resp.Close();
                return null;
            }
            catch (Exception ex)
            {
                WriteLog.Writelog("这是获取页面全部html代码时发生的错误:" + url, ex);
                return null;
            }
        }
        #endregion

这个基本能够获得所有页面的源码了
js生成的代码貌似是存在内存中的。。不知道怎么获取

#5


....又进错地方了

#6


虽然不会。。还是进来看了一看。。。

#7


不会

#8


帮顶

#9


mark

#10


一般用HttpWebRe设计quest,复杂就要使用
爬虫系统了

#11


专程路过,我是菜鸟。

#1


up

#2


谢谢楼上兄弟,这个问题是在太难了!

#3


帮你顶下,我顺便学习学习!

#4


#region 读取页面详细信息
        /// <summary>
        /// 读取页面详细信息
        /// </summary>
        /// <param name="url">需要读取的地址</param>
        /// <param name="EncodingType">读取的编码方式</param>
        /// <returns></returns>
        string GetURLContent(string url, string EncodingType)
        {
            try
            {
                string PetiResp = "";
                Stream mystream;
                System.Net.HttpWebRequest req = (System.Net.HttpWebRequest)System.Net.HttpWebRequest.Create(url);
                req.AllowAutoRedirect = true;
                System.Net.HttpWebResponse resp = (System.Net.HttpWebResponse)req.GetResponse();
                if (resp.StatusCode == System.Net.HttpStatusCode.OK)
                {
                    mystream = resp.GetResponseStream();
                    System.Text.Encoding encode = System.Text.Encoding.GetEncoding(EncodingType);
                    StreamReader readStream = new StreamReader(mystream, encode);
                    char[] cCont = new char[256];
                    int count = readStream.Read(cCont, 0, 256);
                    while (count > 0)
                    {
                        // Dumps the 256 characters on a string and displays the string to the console. 
                        String str = new String(cCont, 0, count);
                        PetiResp += str;
                        count = readStream.Read(cCont, 0, 256);
                    }
                    resp.Close();
                    return PetiResp;
                }
                resp.Close();
                return null;
            }
            catch (Exception ex)
            {
                WriteLog.Writelog("这是获取页面全部html代码时发生的错误:" + url, ex);
                return null;
            }
        }
        #endregion

这个基本能够获得所有页面的源码了
js生成的代码貌似是存在内存中的。。不知道怎么获取

#5


....又进错地方了

#6


虽然不会。。还是进来看了一看。。。

#7


不会

#8


帮顶

#9


mark

#10


一般用HttpWebRe设计quest,复杂就要使用
爬虫系统了

#11


专程路过,我是菜鸟。