想写个网页采集器、请问C# 自已写的winForm,如何获得浏览器(如360)网页中选取的部分内容(文本和图片)?

解决方案 »

  1.   

    我目前想到有两种方法,
    第一种用 Clipboard.GetDataObject(),但这种方法,不能图文一并获取,而且无法获得链接内容(即源码、htmlText)。
    第二种用 EnumWindows--mshtml.IHTMLDocument2,但这种方法只能获取兼容模式内容,即InternetExplorer,无法获取极速模式的Chrorme内容?
    烦请各位大神能指点一下迷津,指条明路。谢谢!
      

  2.   

    HttpWebRequest满足不了你么?
      

  3.   

    我的意思是,在自已写的winForm里,去获取 ,比如:360浏览器或者qq浏览器等打开的网页里,选择一段想要的内容(文本或图片)。
      

  4.   

    第一种 知道地址用  HttpClient 或 HttpWebRequest 爬一下
    第二种,用 webbrowser 组件通过 Dom 来处理,这个更方便一些。 
      

  5.   

    用HttpWebRequest,还要自已写浏览器,太麻烦了。
    用 webbrowser 组件通过 Dom 来处理,我试过,好像得不到360浏览器或者qq浏览器页面内容(在极速模式下)
      

  6.   

    HttpWebRequest怎么需要自己写浏览器呢, 不是发送请求然后获取响应的内容么, 正是你要的啊, 比如下载图片:https://blog.csdn.net/KingCruel/article/details/53538148
      

  7.   

    或者你安装一个curl, 然后c#里面调用更简单:
    https://zhidao.baidu.com/question/552246331.html
      

  8.   

    老大,我是想写一个网页采集小程序,目的就是在上网过程中,看到好的文章,代码等 ,就摘要保存下来,供以后学习。也就是说网址并不确定,而是看到有什么好文,再收集,所以用HttpWebRequest 这个不是太合适啊。也就是要便看便采集。所以只能用浏览器先阅读,再采集。以前一直用的是网博士,但作者很久不更新了,而且在64位也,使用有点问题,所以才逼着自已动手想写一个类似的采集程序。
      

  9.   

    咱们暂且指定一种360浏览器,如何抓取呢?用spy++查看了一下360浏览器。极速模式
    窗口句柄:985154
    窗口标题:Chrome Legacy Window
    类名:Chrome_RenderWidgetHostHWND兼容模式:
    窗口句柄:1507940
    窗口标题:
    类名:Internet Explorer_Server
      

  10.   

    用CEF自己搭一个浏览器,和360急速模式用的内核一样
      

  11.   

    这个C#,与C,C++区别大吗?
      

  12.   

    看7楼,声明一个HttpClient 或 HttpWebRequest(网址路径写好),找一个一个get方法存到list或Table中,然后你就可以用了。
      

  13.   

    抓取数据用httprequest
      

  14.   

      其实最简单的办法就是  鼠标右键 ->复制啊!! 然后在自己的程序里 粘贴//---------以下的代码是我网上复制的 它直接下载整个页面的代码,管用!
    //---------   调用 方式为       string htm= HttpGetPageHtml("https://www.ip.cn", "utf-8");
    /// <summary>
            /// 获取页面html
            /// </summary>
            /// <param name="url">请求的地址</param>
            /// <param name="encoding">编码方式</param>
            /// <returns></returns>  
    public static string HttpGetPageHtml(string url, string encoding)
            {
                string pageHtml = string.Empty;
                try
                {
                    using (WebClient MyWebClient = new WebClient())
                    {
                        Encoding encode = Encoding.GetEncoding(encoding);
                        //  确定自己浏览器的User-Agent信息
                        //  首先打开你的浏览器输入:about:version                    MyWebClient.Headers.Add("User-Agent", "Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/57.0.2987.98 Safari/537.36 LBBROWSER");
                        MyWebClient.Credentials = CredentialCache.DefaultCredentials;//获取或设置用于向Internet资源的请求进行身份验证的网络凭据
                        Byte[] pageData = MyWebClient.DownloadData(url); //从指定网站下载数据
                        pageHtml = encode.GetString(pageData);
                    }
                }
                catch (Exception e)
                {
                    return e.Message.ToString();  
                }
                return pageHtml;
            }
      

  15.   

    抓取数据用httprequest
      

  16.   

    这是参考,只要改下 相关代码即可。using System;namespace ConsoleApp2
    {
        class Program
        {
            static void Main(string[] args)
            {
                System.Net.Http.HttpClient httpClient = new System.Net.Http.HttpClient();
                httpClient.BaseAddress = new Uri("https://dms.esnadexpress.com/");            System.Net.Http.HttpRequestMessage httpRequestMessage = new System.Net.Http.HttpRequestMessage();
                httpRequestMessage.Method = new System.Net.Http.HttpMethod("GET");
                httpRequestMessage.Headers.Add("context-type", "application/pdf");
                httpRequestMessage.RequestUri = new Uri("https://dms.esnadexpress.com/img/2019-07-16/2/custom_pdf_ESNAD_1563242468479_54981_3223fe36-31c3-4d73-b447-d2c4720046fa.pdf");            System.Net.Http.HttpResponseMessage httpResponseMessage = httpClient.SendAsync(httpRequestMessage).Result;            if (httpResponseMessage.StatusCode == System.Net.HttpStatusCode.OK)
                {
                    System.IO.Stream stream = httpResponseMessage.Content.ReadAsStreamAsync().Result;
                    using (System.IO.FileStream fs = new System.IO.FileStream("e:\\download.pdf", System.IO.FileMode.CreateNew))
                    {
                        byte[] buffer = new byte[stream.Length];
                        stream.Read(buffer, 0, buffer.Length);
                        fs.Write(buffer, 0, buffer.Length);
                    }
                }
            }
        }
    }
      

  17.   

    如果你是要搞采集的话,送你一个强大的html分析工具:HtmlAgilityPack。
      

  18.   

    你还不如去用网络收藏夹,比如http://yijee.esgao.cn/,注册个账号就可以了。
    或者使用油猴插件,写JS代码,将选区发送到指定的地址,再写入数据库或者文件里
      

  19.   

    首先,感谢各位大神的回复。
    我先解释下,为什么不用httprequest 或 WebClient:
    第一,我不知道我要的资料在哪,只有通过浏览器搜寻找到想要的内容。
    第二,想要的内容不一定是全文,可能只是其中的部分内容。也就是说要在网页中检索出我要的内容。
    第三,如果再调用httprequest 或 WebClient把网页或图片下载下来,再分析提出,等于要检索2次。还要在winForm和浏览器中切换。效率太低,达不到自动化的效果。其次,我想说一下 我的主要问题是:如何获得浏览器(如360浏览器)里网页中选取的部分内容(文本和图片)?
      

  20.   

    没太懂楼主想实现什么功能,你是要自己开发一个winform程序浏览网页,然后在浏览的过程中把你觉得好的东西保存一下,还是用浏览器浏览网页,然后把比较好的东西保存一下。
      

  21.   

    既然你都选取内容了 你就按一下 Ctrl+V  然后  winform里 操作剪切板就好了啊~
      

  22.   

    上面手误了 应该是 Ctrl+C 复制,  然后  winform 里 获取剪切板 内容
      

  23.   

    用 Clipboard.GetDataObject(),但这种方法,不能图文一并获取,而且无法获得链接内容(即源码、htmlText)。
      

  24.   

    有一个插件程序叫cefsharp的你可以百度下看看。可以让你开启浏览器神模式。没有信息是拿不到的。
      

  25.   

    我的一个C#项目,也涉及到和楼主一样的问题,研究了好几天了,一个基本的思路是获得浏览器窗口的句柄,然后发送CTRL+C,把内容复制到系统的剪贴板中,再提取剪贴板内容,但目前看问题还比较多。不知道楼主解决了没有,如果解决了可否分享下。谢谢!
      

  26.   

    每天逛逛CSDN学习