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

virword 2019-08-08 06:24:29
想写个网页采集器、请问C# 自已写的winForm,如何获得浏览器(如360)网页中选取的部分内容(文本和图片)?
...全文
3506 40 打赏 收藏 转发到动态 举报
写回复
用AI写文章
40 条回复
切换为时间正序
请发表友善的回复…
发表回复
virword 2022-05-01
  • 打赏
  • 举报
回复

好久没上了,这个问题已经解决,但一直找不到自已发的贴了,今天终于到了。我把解决的方法说一下,也免其它人走弯路,其实也很简单,就是通过自动化功能AfxOleInit,拖动时触发OnDrop事件,通过枚举,就可以得到网页的源代码。
pDataObject->GetData(fe.cfFormat, &stgm)
.......
{ //判断是不是Version:1.0 字符前五个字
if (*pText == 0x56 && *(pText + 1) == 0x65 && *(pText + 2) == 0x72 && *(pText + 3) == 0x73 && (pText + 4) == 0x69)
{
if (pDataObject->IsDataAvailable(fe.cfFormat))
{
CString strUrl;
strUrl.Format("%s\r\n", UtfToGbk(pText));//获取网页代码 要urltoGbk.
((CMFCApplication6Dlg
)m_pParent)->ShowStatus(strUrl);
}
}
.......
希望能给大家一点帮助。

shawn_yang 2019-09-09
  • 打赏
  • 举报
回复
自己写个浏览器插件,用插件去获取复制内容
独立观察员 2019-09-06
  • 打赏
  • 举报
回复


楼主可以把这个改造一下
liushiying18 2019-09-06
  • 打赏
  • 举报
回复
每天逛逛CSDN学习
古道白云 2019-09-05
  • 打赏
  • 举报
回复
我的一个C#项目,也涉及到和楼主一样的问题,研究了好几天了,一个基本的思路是获得浏览器窗口的句柄,然后发送CTRL+C,把内容复制到系统的剪贴板中,再提取剪贴板内容,但目前看问题还比较多。不知道楼主解决了没有,如果解决了可否分享下。谢谢!
weixin_42694355 2019-08-16
  • 打赏
  • 举报
回复
看了上面的回答,好像都没有理解楼主的意思。 楼主其实可以做成像QQ截图一下,设置组合键,调用自己的程序去截图,截完后你可以对图片进行文字提取保存文本,或是直接保存图片到你自己的系统里面。
virword 2019-08-16
  • 打赏
  • 举报
回复
这个建议不错,可是后期如果能完整地从图中把文字识别出来,那就可以争大钱啦!
Hello World, 2019-08-14
  • 打赏
  • 举报
回复
你还不如去用网络收藏夹,比如http://yijee.esgao.cn/,注册个账号就可以了。
或者使用油猴插件,写JS代码,将选区发送到指定的地址,再写入数据库或者文件里
  • 打赏
  • 举报
回复
有一个插件程序叫cefsharp的你可以百度下看看。可以让你开启浏览器神模式。没有信息是拿不到的。
SinGooCMS 2019-08-14
  • 打赏
  • 举报
回复
如果你是要搞采集的话,送你一个强大的html分析工具:HtmlAgilityPack。
virword 2019-08-14
  • 打赏
  • 举报
回复
用 Clipboard.GetDataObject(),但这种方法,不能图文一并获取,而且无法获得链接内容(即源码、htmlText)。
冰川711 2019-08-14
  • 打赏
  • 举报
回复
上面手误了 应该是 Ctrl+C 复制, 然后 winform 里 获取剪切板 内容
冰川711 2019-08-14
  • 打赏
  • 举报
回复
引用 29 楼 virword 的回复:
首先,感谢各位大神的回复。 我先解释下,为什么不用httprequest 或 WebClient: 第一,我不知道我要的资料在哪,只有通过浏览器搜寻找到想要的内容。 第二,想要的内容不一定是全文,可能只是其中的部分内容。也就是说要在网页中检索出我要的内容。 第三,如果再调用httprequest 或 WebClient把网页或图片下载下来,再分析提出,等于要检索2次。还要在winForm和浏览器中切换。效率太低,达不到自动化的效果。 其次,我想说一下 我的主要问题是: 如何获得浏览器(如360浏览器)里网页中选取的部分内容(文本和图片)?
既然你都选取内容了 你就按一下 Ctrl+V 然后 winform里 操作剪切板就好了啊~
  • 打赏
  • 举报
回复
没太懂楼主想实现什么功能,你是要自己开发一个winform程序浏览网页,然后在浏览的过程中把你觉得好的东西保存一下,还是用浏览器浏览网页,然后把比较好的东西保存一下。
virword 2019-08-14
  • 打赏
  • 举报
回复
首先,感谢各位大神的回复。 我先解释下,为什么不用httprequest 或 WebClient: 第一,我不知道我要的资料在哪,只有通过浏览器搜寻找到想要的内容。 第二,想要的内容不一定是全文,可能只是其中的部分内容。也就是说要在网页中检索出我要的内容。 第三,如果再调用httprequest 或 WebClient把网页或图片下载下来,再分析提出,等于要检索2次。还要在winForm和浏览器中切换。效率太低,达不到自动化的效果。 其次,我想说一下 我的主要问题是: 如何获得浏览器(如360浏览器)里网页中选取的部分内容(文本和图片)?
manpa2772 2019-08-13
  • 打赏
  • 举报
回复
什么意思选取内容是什么
XBodhi. 2019-08-13
  • 打赏
  • 举报
回复
这是参考,只要改下 相关代码即可。

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);
}
}
}
}
}
cw398605763 2019-08-12
  • 打赏
  • 举报
回复
抓取数据用httprequest
wangqx86662638 2019-08-11
  • 打赏
  • 举报
回复
其实最简单的办法就是 鼠标右键 ->复制啊!! 然后在自己的程序里 粘贴

//---------以下的代码是我网上复制的 它直接下载整个页面的代码,管用!
//--------- 调用 方式为 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;
}
Chip_Liu1227812601 2019-08-10
  • 打赏
  • 举报
回复
看7楼,声明一个HttpClient 或 HttpWebRequest(网址路径写好),找一个一个get方法存到list或Table中,然后你就可以用了。
加载更多回复(20)

110,538

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Web++
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧