自从防复制代码从JS屏蔽鼠标右键升级到随机插入乱码+版权信息后,要整理复制出来的文字变得相当困难。有些网站无所不用其极,每行文字前后都有差乱码,其中还混杂了大量空格、单词、随机汉字...
俗话说魔高一尺,“盗”高一仗,学了这么久WebBrowser技术,总该有点成果了。 这里就以盗取(呃..口误,是“复制”...复制)BBS上可见字符为目标,写一个可以过滤某BBS不可见乱码的程序。
其实这个程序很简单,首先是如何获取选定部分的HTML,还记得这段吗:
HTMLDoc := WebBrowser1.Document as IHTMLDocument2; SelectRange := HTMLDoc.selection.createRange() as IHTMLTxtRange;
这样 SelectRange.htmlText 就是选择部分的HTML了。
接着来实现 TrimBBSText() 函数,用于去除复制文字中的不可见乱码。
1 { ****************************************** 2 * 3 * TrimBBSText() 伪代码 4 * 5 ****************************************** } 6 function TrimBBSText(aBBSStr: String): String; 7 var 8 tmpStr, tmpSub: String; 9 iCharPos: Integer; 10 begin 11 iCharPos : = 1 ; 12 // 从tmpStr的第一个字符到最后一个 13 while (iCharPos <= Length(tmpStr)) do 14 begin 15 case tmpStr[iCharPos] of // 检查当前字符 16 17 ' < ' : { -HTML标记处理- } 18 begin 19 // 取标签内容 20 tmpSub : = HTML标签内容; 21 22 if ( 是 < BR > ) then 23 begin 24 Result : = Result + # 13 # 10 ; // 换成换行符 CRLF = #13#10 25 Continue; 26 end ; 27 28 // 第一种隐藏方式,SPAN标签加 DISPLAY: none 29 if ( 是 < SPAN style = "DISPLAY: none" > ) then 30 begin 31 // 跳过直到SPAN标签结束 32 Continue; 33 end ; 34 35 // 第一种隐藏方式,字体大小 font-size: 0px; 36 if ( 是 < FONT style = "font - size: 0px; " > ) then 37 begin 38 // 跳过直到FONT标签结束 39 Continue; 40 end ; 41 42 // 其他标签处理 43 Continue; 44 end ; 45 46 ' & ' : { -转义字符处理- } 47 begin 48 tmpSub : = 取转义字符内容; 49 // - 空格 50 if (tmpSub = ' ' ) then 51 begin 52 Result : = Result + ' ' ; 53 Continue; 54 end ; 55 56 // 在这里处理其他标记,否则直接贴上转义字符 57 Result : = Result + tmpSub; 58 end ; 59 60 else 61 begin 62 // 其他字符不处理 63 Result : = Result + tmpStr[iCharPos]; 64 end ; 65 end ; 66 Inc(iCharPos); 67 end ; 68 end ;
实际上就是自己处理HTML标签,遇到 DISPLAY: none 和 font-size: 0px 的字符就给跳过。这样一来,剩下的就是真实可见部分了。另外要注意的是,HTML中有可能存在转义字符(最常见的是 ),处理方法见代码46行。
另外,还可以用IHTMLDocument3接口去处理HTML标记并获取内容,只不过那个方法处理起来比这个循环还麻烦,以后有机会再演示一下。
代码中只处理了 SPAN标签DISPLAY: none 和 FONT标签font-size: 0px 两种情况,如果要想程序通用,还需在代码中加入更多对不可见字符的识别。
源码(Source):BBSText_src.rar 可执行程序:论坛文字提取_bin.rar
转载于:https://www.cnblogs.com/bits/archive/2009/03/09/Delphi-WebBrowser_BBSText_copy.html
相关资源:各显卡算力对照表!