PyQtWebkit和JavaScript

0 投票
2 回答
580 浏览
提问于 2025-04-16 04:54

我有一个网页,上面有JavaScript代码。 我需要在JavaScript执行完后获取网页上的DOM元素。 JavaScript会在一个名为'sdl'的div里面插入文本。 我需要获取这个文本的值。这个值不能直接在JavaScript源代码中找到,因为它是由JavaScript生成的。 我该怎么做呢? 抱歉我的英语不好。

2 个回答

0

在Python中,你可以使用Ghost,这是一个开源项目,可以在github上找到。它是一个围绕PyQt4和WebKit的工具,使用起来效果不错。你只需要这样做:

import ghost
g = ghost.Ghost()
g.open('http://stackoverflow.com/')

现在,g.content就代表了文档,经过渲染后。

你还可以用evaluate方法在文档中执行JavaScript代码,它会返回JavaScript的值。

Ghost也很方便地暴露了PyQt对象,所以你可以对Ghost对象进行一些Ghost没有实现的操作,它会直接通过。

我记不太清楚了,但我觉得像这样:

g.main_frame.setContent('<b>Hello World</b>')

可以用来设置文档,而

g.content = '<b>Hello World</b>'

则是用来抛出一个文档。虽然需要一点时间来适应,但很快就能让它按照你想要的方式工作。

Ghost的文档不太好,但源代码只有一个文件,说明也很清楚。我用Ghost,感觉还不错。只要记得不要创建多个Ghost对象,否则可能会导致崩溃。

1

DOM是可以被访问的(至少在pyqt >= 4.7.4版本中是这样)

document = webview.page().currentFrame().documentElement()
document.findAll("a") 
...

http://www.riverbankcomputing.co.uk/static/Docs/PyQt4/html/qwebframe.html

http://www.riverbankcomputing.co.uk/static/Docs/PyQt4/html/qwebelement.html

撰写回答