我有一个用C#编写的Web scraper来提取数据。我想从Web浏览器控件中复制文本并以编程方式将其粘贴到Word文件中。当我尝试使用其ID和InnerText提取富文本框内容时,文本包含编码字符,如%2c。
我需要获取所有格式的文本,但我无法找到任何方式。我尝试了Encoding
,HTTPUtility.UrlDecode
,SendKeys
和elem.InvokeMember()
但没有成功。
如何以编程方式从Web浏览器控件中复制和粘贴文本以保留格式?
以下是要提取的示例数据:
描述
Advance Concepts Engineering团队设计和开发新车辆,以满足未来的法规要求和客户竞争要求。合格的候选人将负责整车的包装。当车辆转向生产时,候选人将识别并解决适应和包装问题。他们将领导与Systems& Co.合作的跨职能团队会议。组件,高级制造,服务等,以确保解决方案针对车辆生命周期的各个阶段进行优化。
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);
答案 0 :(得分:0)
带"%2c"的文字等已被编码。如果要获取网页的内容,则需要解码HTML,而不是URL。您可以使用HttpUtility.HtmlDecode
,或者如果您使用的是.NET 4.0或更高版本,也可以使用WebUtility.HtmlDecode - 这可以在System.Net
命名空间中使用。
您应该注意Word不会使用HTML进行格式化,因此您无法粘贴HTML标记并希望它能够识别它们。如果您在Word中键入,则<strong>Description</strong>
将不会生成粗体文本。
编辑:
您似乎混合了两种不同的方式来复制粘贴代码中的文字 - SendKeys.SendWait("^c");
和elem.InvokeMember("Copy");
。我认为这两种方法都有效吗?
我认为您遇到的问题在于您获取文本的方式。我看到你正在使用Clipboard.GetText()
来获取文字。尝试使用Clipboard.GetText(TextDataFormat.Rtf)
或Clipboard.GetText(TextDataFormat.Html)
指定格式化文字。这应该有希望复制保留格式的字符串。