js和qt4 evaluteJavascript

73 篇文章 2 订阅
13 篇文章 0 订阅
#coding=utf-8

__author__ = 'ds'

from PyQt4.QtCore import *
from PyQt4.QtWebKit import *
from PyQt4.QtNetwork import *
from PyQt4.QtGui import *
import sys,os

class Page(QWebPage):
    def __init__(self, parent = None):
        super(Page, self).__init__(parent)

        #设置连接代理模式
        #self.setLinkDelegationPolicy(QWebPage.DelegateAllLinks)
        #连接点击,加载URL地址
        self.linkClicked.connect(self.onLinkClick)
        self.loadFinished.connect(self.onLoadFinish)

    def onLinkClick(self, url):
        self.mainFrame().load(url)

    @staticmethod
    def doMouseClick(obj, pos):
        # mouse down
        evt = QMouseEvent(QEvent.MouseButtonPress, pos,
                                Qt.LeftButton, Qt.LeftButton, Qt.NoModifier)
        QApplication.sendEvent(obj, evt)
        # mouse up
        evt = QMouseEvent(QEvent.MouseButtonRelease, pos,
                                Qt.LeftButton, Qt.LeftButton, Qt.NoModifier)
        QApplication.sendEvent(obj, evt)

    def onLoadFinish(self):
        css = 'a[class="mnav"][name="tj_trmap"]'
        js = 'this.click();'
        root = self.mainFrame().documentElement()
        link_map = root.findFirst(css)
        if link_map:
            #方案1:可能不会起作用,除了按钮以为并非对所有的链接都支持
            #link_map.evaluateJavaScript(js)

            #方案2,直接做鼠标点击的模拟,对隐藏控件不行
            #self.doMouseClick(self, link_map.geometry().center())

            #方案3,使用event进行处理,只要支持事件,就可以(除非禁掉)
            link_map.evaluateJavaScript("""
                //鼠标点击
                var e = document.createEvent('MouseEvents');
                e.initEvent('click', true, true);

                //将该事件分发给自己进行接收
                this.dispatchEvent(e);

                //直接使用事件处理很好用
                //this.addEventListener('click', function(){
                //    alert('test');
                //});
                """)
            print('Javascript Evaluated.')

app = QApplication(sys.argv)
QNetworkProxyFactory.setUseSystemConfiguration(True)

mv = QWebView()
mv.setWindowTitle(u'Javascript浏览器')
mv.setPage(Page())
mv.show()
mv.load(QUrl('http://www.baidu.com'))

app.exec_()


  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值