首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Spynner -访问DOM

Spynner -访问DOM
EN

Stack Overflow用户
提问于 2014-12-29 02:45:28
回答 2查看 412关注 0票数 0

我刚刚了解到浏览器的“查看源”和“检查元素”之间有区别。当我在特定的网页上使用firefox中的“检查”时,我得到以下信息:

代码语言:javascript
复制
<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?

我已经尝试了以下源代码:

代码语言:javascript
复制
br = spynner.Browser()
br.show()
br.load(url)
ret = br.runjs('document.getElementById('someID');")
print ret

但这只会打印出来:

代码语言:javascript
复制
<PyQt4.QtCore.QVariant object at 0x9870e64>

//

编辑

由于ret是一个QVariant,所以我通过修改代码将其转换为PyObject:

代码语言:javascript
复制
ret = br.runjs('document.getElementById('someID').getAttribute('style');")
print ret.toPyObject()

我现在唯一的问题是:打印只显示“样式”的第一个值。

代码语言:javascript
复制
z-index: 9999;

我能否以某种方式访问其他值(左、顶、高、不透明、可见性)?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2014-12-29 21:47:44

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

另一件事是:我正在寻找的元素是一个java PopUp。如果用户提供输入,这是不允许的,那么这个PopUp就会出现,需要确认。因此,我现在所做的不是检查PopUp是否“可见”,而是检查确认按钮是否“未禁用”。这是通过以下方式完成的:

代码语言:javascript
复制
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调用。解决办法可能是平淡无奇的,但对我来说是可行的。而且我知道这个解决方案是非常具体的。但也许有一天有人也会遇到类似的问题。

票数 0
EN

Stack Overflow用户

发布于 2014-12-29 03:40:31

动态添加的控件在浏览器的视图源选项(在mozilla中)中是不可见的,但是它们将在DOM中更新。您可以直接搜索元素并读取其可见性值。

代码语言:javascript
复制
//read visibility value and store it in x
var x =  document.getElementById("someID").getAttribute("visibility");
alert(x); // display value of x in a pop
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/27682793

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档