我刚刚了解到浏览器的“查看源”和“检查元素”之间有区别。当我在特定的网页上使用firefox中的“检查”时,我得到以下信息:
<html>
...
<div class="someClass" id="someID" style="z-index: 12001; left: 0px; top: -487px; width: 1288px; height: 843px; opacity: 0.7; visibility: visible;">
...
</html>但是,当我使用“查看源”时,我看不到这个元素。当我通过Spynner访问网页并解析html时,就会出现看不到元素的问题。因为我需要知道“可见性”的价值,所以我的问题是:如何在Spynner中访问DOM?
我已经尝试了以下源代码:
br = spynner.Browser()
br.show()
br.load(url)
ret = br.runjs('document.getElementById('someID');")
print ret但这只会打印出来:
<PyQt4.QtCore.QVariant object at 0x9870e64>//
编辑
由于ret是一个QVariant,所以我通过修改代码将其转换为PyObject:
ret = br.runjs('document.getElementById('someID').getAttribute('style');")
print ret.toPyObject()我现在唯一的问题是:打印只显示“样式”的第一个值。
z-index: 9999;我能否以某种方式访问其他值(左、顶、高、不透明、可见性)?
发布于 2014-12-29 21:47:44
我发现我搞砸了我的代码。我没有插入"someID“,而是插入了"someOtherID",它不包含我正在寻找的属性。这个愚蠢的错误花了我很多时间。
另一件事是:我正在寻找的元素是一个java PopUp。如果用户提供输入,这是不允许的,那么这个PopUp就会出现,需要确认。因此,我现在所做的不是检查PopUp是否“可见”,而是检查确认按钮是否“未禁用”。这是通过以下方式完成的:
val items = document.getElementsByTagName('input');
for(var i=0; i<items.length; i++){
if(items[i].getAttribute('name') == inputName){
if(items[i].getAttribute('disabled') == null){
items[i].click();}}}这个js代码通过spynner内部的runjs()-method调用。解决办法可能是平淡无奇的,但对我来说是可行的。而且我知道这个解决方案是非常具体的。但也许有一天有人也会遇到类似的问题。
发布于 2014-12-29 03:40:31
动态添加的控件在浏览器的视图源选项(在mozilla中)中是不可见的,但是它们将在DOM中更新。您可以直接搜索元素并读取其可见性值。
//read visibility value and store it in x
var x = document.getElementById("someID").getAttribute("visibility");
alert(x); // display value of x in a pophttps://stackoverflow.com/questions/27682793
复制相似问题