0

我刚刚了解到浏览器的“查看源代码”和“检查元素”之间存在差异。当我在特定网页上的 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;

我可以以某种方式访问​​其他值(左侧、顶部、高度、不透明度、可见性)吗?

4

2 回答 2

0

动态添加的控件在浏览器的视图源选项(在 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 pop
于 2014-12-29T03:40:31.463 回答
0

我发现我弄乱了我的代码。我插入了“someOtherID”而不是“someID”,它不包含我正在寻找的属性。这个愚蠢的错误花了我很多时间。

然后另一件事是:我正在寻找的元素是一个 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() 方法调用的。解决方案可能是行人,但它对我有用。我也知道这个解决方案非常具体。但也许有一天有人可能会遇到类似的问题。

于 2014-12-29T21:47:44.943 回答