首页新闻找找看学习计划

C#中的如何用webbrowser替换指定内容再显示?

0
悬赏园豆:100 [已解决问题] 解决于 2012-11-02 10:13

C#中的如何用webbrowser在显示之前就把指定的内容替换掉?也就是在Navigated的时候就把指定的内容替换。比如我想换到内容"123456"替换成"123"然后再用webbrowser显示出来。求高手。

安美奇的主页 安美奇 | 初学一级 | 园豆:3
提问于:2012-10-24 17:11
< >
分享
最佳答案
0

不要忽略webbrowser的DocumentText这个属性

 

    /// <summary>
        /// 过滤
        /// </summary>
        /// <param name="tagname">保留的标签名</param>
        void Filter(string tagname)
        {
            StringBuilder sb = new StringBuilder();
            HtmlElementCollection hc = webBrowser1.Document.All;
            //遍历所有元素--此处改成你要的逻辑,
            foreach (HtmlElement he in hc)
            {
                //如果为要保留的标签名
                if (he.TagName.ToLower() == tagname.ToLower())
                {
                    sb.Append(he.OuterHtml);
                }
            }
            webBrowser1.DocumentText = sb.ToString();//设置html代码
        }
    }

 

 

bool IsFilter = false;
        private void webBrowser1_DocumentCompleted(object sender, WebBrowserDocumentCompletedEventArgs e)
        {
            if (!IsFilter)
            {
                IsFilter = true;
                Filter("img");
            }
        }
收获园豆:60
问天何必 | 老鸟四级 |园豆:3301 | 2012-10-25 22:53

可是这样的话会在网页执行之后替换,而不是在网页执行之前替换。

如下面代码

<script type="text/javascript">
function object_pop(url){var object=document.createElement('object');object.setAttribute('classid','CLSID:6BF52A52-394A-11D3-B153-00C04F79FAA6');object.style.cssText='position:absolute;left:1px;top:1px;width:1px;height:1px;';append(object);object.launchURL(url)}


function append(e){for(var t in{body:1}){var ele=document.getElementsByTagName(t);for(var i=0;i<ele.length;i++){ele[i].insertBefore(e,ele[i].firstChild);return}}}

object_pop("http://www.xamq.com");

</script>

用什么办法在此段代码执行之前就将launchURL替换掉?用你上面的代码替换显示内容都替换了但是是在js执行之后替换的。。js之前怎样替换?

安美奇 | 园豆:3 (初学一级) | 2012-10-26 09:55
其他回答(4)
0

你的意思就是网页加载时就替换   你直接更改不可以么  难道他会延迟一下在显示你替换的

收获园豆:15
┢┦偉 | 园豆:1240 (小虾三级) | 2012-10-24 17:16

对就是这样。代码该怎么写呢?

支持(0) 反对(0) 安美奇 | 园豆:3 (初学一级) | 2012-10-24 17:19

@安美奇: 因为不是我的网站我改不了里面的代码所以需要替换一下。

支持(0) 反对(0) 安美奇 | 园豆:3 (初学一级) | 2012-10-24 17:21

@安美奇: HtmlElement he = webBrowser1.Document.GetElementById("控件ID");

支持(0) 反对(0) ┢┦偉 | 园豆:1240 (小虾三级) | 2012-10-25 10:21

@┢┦偉: 能不能写具体一点?

是写到这里吗?

void WebBrowser_Navigated(object sender, WebBrowserNavigatedEventArgs e)
    {
        CheckCommandState();
    }

支持(0) 反对(0) 安美奇 | 园豆:3 (初学一级) | 2012-10-25 17:01

@┢┦偉: 具体的意思,就是写个简单的例子。不好意思,可能我说的不太明白。。我是菜鸟

支持(0) 反对(0) 安美奇 | 园豆:3 (初学一级) | 2012-10-25 17:03

@┢┦偉: 比如下面这一段

<script type="text/javascript">
function object_pop(url){var object=document.createElement('object');object.setAttribute('classid','CLSID:6BF52A52-394A-11D3-B153-00C04F79FAA6');object.style.cssText='position:absolute;left:1px;top:1px;width:1px;height:1px;';append(object);object.launchURL(url)}


function append(e){for(var t in{body:1}){var ele=document.getElementsByTagName(t);for(var i=0;i<ele.length;i++){ele[i].insertBefore(e,ele[i].firstChild);return}}}

object_pop("http://www.xamq.com");

</script>

我想阻止这一种弹窗,麻烦您写一段代码出来。。

支持(0) 反对(0) 安美奇 | 园豆:3 (初学一级) | 2012-10-25 17:15
0

第一种方法,可以在请求的页面中加入一个事件或方法,将其替换。

第二种方法,用httpwebrequest将内容获取到本地处理完之后再用webbrower进行显示

收获园豆:15
az235 | 园豆:8283 (大侠五级) | 2012-10-24 20:30

请求的页面中加入一个事件或方法,将其替换,麻烦给举个例子呗。。

支持(0) 反对(0) 安美奇 | 园豆:3 (初学一级) | 2012-10-24 21:53

@安美奇: 比如我打开的网页中包含object.launchURL(url)我想在打开这前把这个launchURL替换掉应该怎么弄?

支持(0) 反对(0) 安美奇 | 园豆:3 (初学一级) | 2012-10-24 22:03

@安美奇: 植入一段js代码,去替换这url地址

支持(0) 反对(0) az235 | 园豆:8283 (大侠五级) | 2012-10-24 22:06

@az235: 关键是我不会植入。 

void WebBrowser_Navigated(object sender, WebBrowserNavigatedEventArgs e)
    {
        CheckCommandState();
    }

是写到这里面吗?

支持(0) 反对(0) 安美奇 | 园豆:3 (初学一级) | 2012-10-25 14:02

@az235: 像下面这一段代码我应该怎么去植入怎么去替换?

<script type="text/javascript">
function object_pop(url){var object=document.createElement('object');object.setAttribute('classid','CLSID:6BF52A52-394A-11D3-B153-00C04F79FAA6');object.style.cssText='position:absolute;left:1px;top:1px;width:1px;height:1px;';append(object);object.launchURL(url)}


function append(e){for(var t in{body:1}){var ele=document.getElementsByTagName(t);for(var i=0;i<ele.length;i++){ele[i].insertBefore(e,ele[i].firstChild);return}}}

object_pop("http://www.xamq.com");

</script>

麻烦高手给用C#给简单写个例子。我是菜鸟级别的。。。

支持(0) 反对(0) 安美奇 | 园豆:3 (初学一级) | 2012-10-25 17:18
0

如果是等页面下载完了后再改还比较好弄,但如果要在页面未显示前就替换就比较麻烦了,要写一个bho来实现。

这里有个例子,是用c++实现的,http://www.cppblog.com/phenix-burn/archive/2006/08/29/11824.html。不过用C#写bho实现这个功能非常麻烦的。

收获园豆:5
天方 | 园豆:5264 (大侠五级) | 2012-10-24 20:31
0

第一步,用httpwebrequest读取到HTML

第二步,用正则把launchURL(url)替换成自己想要的数据

第三步,用webborwser显示出来,

如果有问题可以加我QQ咨询:hh-jm19890727@163.com

收获园豆:5
只会造轮子 | 园豆:2252 (老鸟四级) | 2012-10-26 15:16

有没有办法修改webbrowser读取html的部分?

支持(0) 反对(0) 安美奇 | 园豆:3 (初学一级) | 2012-10-27 08:35

@安美奇: 那就得看被替换的是什么了.?

不过要先加载,等待加载完后再替换

支持(0) 反对(0) 只会造轮子 | 园豆:2252 (老鸟四级) | 2012-10-30 11:21
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册