C#网络刮板复制文本

C#网络刮板复制文本,c#,web-scraping,webbrowser-control,C#,Web Scraping,Webbrowser Control,我有一个用C#编写的web scraper,用于提取数据。我想从web浏览器控件复制文本,并以编程方式将其粘贴到Word文件中。当我尝试使用其ID和InnerText提取富文本框内容时,文本包含编码字符,如%2c 我需要得到所有格式的文本,但我找不到任何方法。我尝试了编码,HTTPUtility.UrlDecode,SendKeys和elem.InvokeMember(),但没有成功 如何以编程方式从保留格式的web浏览器控件复制和粘贴文本 以下是要提取的示例数据: 说明 Advanced Co

我有一个用C#编写的web scraper,用于提取数据。我想从web浏览器控件复制文本,并以编程方式将其粘贴到Word文件中。当我尝试使用其ID和InnerText提取富文本框内容时,文本包含编码字符,如%2c

我需要得到所有格式的文本,但我找不到任何方法。我尝试了
编码
HTTPUtility.UrlDecode
SendKeys
elem.InvokeMember()
,但没有成功

如何以编程方式从保留格式的web浏览器控件复制和粘贴文本

以下是要提取的示例数据:

说明

Advanced Concepts工程团队设计和开发新车辆,以满足未来监管要求和客户竞争要求。合格的候选人将负责车辆的整体包装。学员将在车辆走向生产时确定并解决改装和包装问题。他们将领导跨职能团队会议,与系统和部件、先进制造、服务等合作,以确保解决方案针对车辆寿命的所有阶段进行优化

HtmlElement elem = wb.Document.GetElementById("ctl00_contplhDynamic_txtDescrContentHiddenTextarea");
                if (elem == null) return;
                elem.InvokeMember("Click");
                //elem.InvokeMember("Select All");
                //elem.InvokeMember("Copy");
                SendKeys.SendWait("^a");
                SendKeys.SendWait("^c");

                Clipboard.Clear();
                elem.Focus();
                elem.InvokeMember("Right Click");
                elem.InvokeMember("Select All");
                elem.InvokeMember("Copy");

                Clipboard.SetText(elem.InnerText);
                string clipbrdText = Clipboard.GetText();

                string data = elem.InnerText;

                richTextBox1.Text = data;
                string temp = System.Web.HttpUtility.UrlDecode(data);

                Encoding iso = Encoding.GetEncoding("windows-1252");
                Encoding utf8 = Encoding.UTF8;
                byte[] utfBytes = utf8.GetBytes(data);
                byte[] isoBytes = Encoding.Convert(utf8, iso, utfBytes);
                string msg = iso.GetString(isoBytes);
带有“%2c”等的文本已编码。如果您正在获取网页的内容,那么您正在解码HTML,而不是URL。您可以使用
HttpUtility.HtmlDecode
,或者如果您使用的是.NET 4.0或更高版本,您也可以使用WebUtility.HtmlDecode-这在
System.NET
命名空间中提供

您应该注意,Word不使用HTML进行格式化,因此您将无法粘贴HTML标记并期望它能够识别它们。i、 e.
说明
如果在Word中键入,则不会生成粗体文本

编辑:

看起来您混合了两种不同的方法来复制粘贴代码中的文本-都是
SendKeys.SendWait(“^c”)
元素调用成员(“副本”)。我想这两种方法都有效吧


我认为你的问题在于你获取文本的方式。我看到您正在使用剪贴板.GetText()
获取文本。尝试使用
Clipboard.GetText(TextDataFormat.Rtf)
Clipboard.GetText(TextDataFormat.Html)
指定其格式为文本。希望这会复制保留格式的字符串。

感谢Ivan的回复。我搜索了格式问题。因此,我试图复制和粘贴文本。当我从我的网络浏览器(如chrome)复制和粘贴,甚至从网络浏览器控件复制和粘贴到word时,格式保持不变。因此,我试图找到一种以编程方式复制和粘贴文本的方法。有关该功能的任何帮助也会非常有用。如果我理解正确,您的程序会将HTML插入Windows剪贴板(编程副本),然后您按Ctrl-V并将文本粘贴到文档中,但它没有格式,而是带有HTML标记?否。我使用了SendKeys(“^C”)类似于元素上的代码,但它不复制任何内容。我无法复制文本然后粘贴它。目前我只使用element.innertext,还尝试了HTTPUtility.HtmlDecode,但没有用。请编辑您的问题并发布代码?这会让你更容易看到发生了什么。你解决了你的问题吗?不,伊万,我不能。我希望复制文本并将其粘贴到任何word文档或任何地方以保存它。但是我不能抄课文。我可以手动复制,但没有用。你有办法吗?