积极答复者
在webBrowser控件中,可以取得通过JS动态给HTML中IMG标签的SRC赋的值吗?

问题
答案
-
在webBrowser1_DocumentCompleted 事件里通过 上面我说的两种方法都取不到 SRC 的内容。取SRC的时机感觉没有问题吧。
1)我写了一个小程序,尝试了一下,是可以看到src内容的,我所使用的方法,和版主给出的是一样的。我认为这个方法应该是没有问题的。为了查出问题所在,能否给出你源码中GetDomById()的实现?(另:control range应该是不会复制图片的,因为control range是在编辑模式中有效——除非你已经强制使文档进入了编辑模式)2)src的内容是不会出现在源码中的。element.OuterHtml包含了此element在运行时的信息,比如被脚本修改后的src属性。所以,查看源码是没有用的。正确的方法应该是:在IE中打开http://req.qq.com,按F12打开developer toolbar(IE8及以上版本中),点击Script tab,在console中输入"document.getElementById("vfcode").src",便可看到图片src的运行时的值。如果输入“document.getElementById("vfcode").outerHTML",便可以看到img element的HTML,你也就可以比较其与源码中的HTML,应该是不同的。
- 已标记为答案 LeoTangModerator 2011年3月7日 1:39
全部回复
-
答案应该是:可以
首先,你要得到需要的IMG element。然后,调用其get_src()方法,取得其src值。关于get_src()方法,可参考MSDN:http://msdn.microsoft.com/en-us/library/aa752258(v=vs.85).aspx
-
我是在NET环境下开发的,能不能说的详细一点呢。
我怎么找不到你说的get_src()方法呢?
HTML:代码
<div class="formRow">
<div class="formLabel">验证图片:</div>
<div class="formField">
<img id='vfcode' style='cursor:pointer; border:1px solid #e4eef9; float:left;' alt="操作频繁,稍后再试" title="看不清楚? 换张图片" >
<a id='vfcode_a' href="#" class="chgPic">看不清楚? 换张图片</a></div>
</div>
通过JS设置SRC:
function f_RefreshValidcode_Only()
{
$("vfcode").src="http://www.jack-net.com/getimage?aid=618&"+Math.random();
}C#代码:
方法1:try
{
HTMLDocument domDocument = (HTMLDocument)this.webBrowser1.Document.DomDocument;
//IHTMLControlElement domElement = (IHTMLControlElement)this.webBrowser1.Document.Images[1].DomElement;
IHTMLControlElement domElement = (IHTMLControlElement)this.webBrowser1.Document.All["vfcode"].DomElement;
IHTMLControlRange range = (IHTMLControlRange)((HTMLBody)domDocument.body).createControlRange();
range.add(domElement);
range.execCommand("Copy", false, null);
domElement = null;
range = null;
domDocument = null;
// 剪贴板得不到IMG
if (Clipboard.ContainsImage())
{
this.pictureBox1.Image = null;
this.pictureBox1.Image = Clipboard.GetImage();
}
Clipboard.Clear();
}
catch (Exception oEx)
{
txtMsg.Text = oEx.Message;
}方法2:
HtmlElement htmlElement = GetDomById(id);
string strSrc = htmlElement.GetAttribute("src");方法一和二都得不到。
-
webBrowser.Document.GetElementById("ImgID").SetAttribute("src",http://xxx.jpg)
-> 和我问的不是一个问题啊,我是想得到SRC的属性。
webBrowser.Document.GetElementsByTagName("IMG")--> 这种方法试过来,我是直接用的htmlElement.GetAttribute("src");根本得不到,不知道版主有没有试过?
-
我用 webBrowser 加载 http://reg.qq.com/ 这个网站,这个网站上有个验证码,我想在 pictureBox 同时显示验证码的内容。
网站上验证码vfcode是通过,JS动态赋值的,我用IE打开这个网站,然后查看源码,好像也没有看到SRC的内容。
-
在webBrowser1_DocumentCompleted 事件里通过 上面我说的两种方法都取不到 SRC 的内容。取SRC的时机感觉没有问题吧。
1)我写了一个小程序,尝试了一下,是可以看到src内容的,我所使用的方法,和版主给出的是一样的。我认为这个方法应该是没有问题的。为了查出问题所在,能否给出你源码中GetDomById()的实现?(另:control range应该是不会复制图片的,因为control range是在编辑模式中有效——除非你已经强制使文档进入了编辑模式)2)src的内容是不会出现在源码中的。element.OuterHtml包含了此element在运行时的信息,比如被脚本修改后的src属性。所以,查看源码是没有用的。正确的方法应该是:在IE中打开http://req.qq.com,按F12打开developer toolbar(IE8及以上版本中),点击Script tab,在console中输入"document.getElementById("vfcode").src",便可看到图片src的运行时的值。如果输入“document.getElementById("vfcode").outerHTML",便可以看到img element的HTML,你也就可以比较其与源码中的HTML,应该是不同的。
- 已标记为答案 LeoTangModerator 2011年3月7日 1:39
-
1). GetDomById()的实现如下:
private HtmlElement GetDomById(string Id)
{
HtmlElement htmlElement = webBrowser1.Document.GetElementById(Id);
if (htmlElement != null)
{
return htmlElement;
}
else
{
return null;
}
}你说可以看到SRC的内容是指:http://captcha.qq.com/getimage?aid=1007901&0.014937521545590415 这样的内容吗?为什么我取不到那?如果能取到SRC内容,能否把你的下程序,发给我那(EMAIL:jaspine#qq.com)
2).IE8中,按你说的确实可以得到。我就是想通过程序,得到document.getElementById("vfcode").src的内容,同时显示在PICBOX控件上,document.getElementById("vfcode").src的内容固定了,验证码也就确定了。
JS赋值:$("vfcode").src="http://captcha.qq.com/getimage?aid=1007901&"+Math.random();
-
可以监听onreadystatechange事件:http://msdn.microsoft.com/en-us/library/ms536957(v=vs.85).aspx
或者延时检查readyState属性:((IHTMLImgElement)imgElement).readyState。具体内容可见:http://msdn.microsoft.com/en-us/library/aa752247(v=vs.85).aspx