昨晚搞定的,最近好熟识python的qtwebkit的操作,以下是qtwebkit登录新浪微博的python源码,其实发微博的都搞定了,但未能完善,这个理清思路再细致点的搞.
这样操作发微博,好过用新浪的微博api sdk来搞,不过就是复杂点就是了.
以下是qtwebkit登录新浪微博代码
#coding=utf8
import sys,os
import time
import string
#from PyQt4.QtCore import *
#from PyQt4.QtGui import *
#from PyQt4.QtWebKit import *
from PyQt4 import QtGui, QtCore, QtWebKit, QtNetwork
#from PyQt4.QtCore import QObject, QVariant,QPoint
from PyQt4.QtCore import *
class Sp():
def __init__(self, url,app):
self.user_agent = 'Mozilla/5.0 (X11; U; Linux i686; en-US; rv:1.9.2) Gecko/20100124 Firefox/3.6 (Swiftfox)'
self.app = app
self._url = url
self.webView = QtWebKit.QWebView()
self.textx =""
self.mm=0
self.p=1
self.js_click = """
var evt = document.createEvent("MouseEvents");
evt.initMouseEvent("click", true, true, window, 1, 1, 1, 1, 1, false, false, false, false, 0, this);
this.dispatchEvent(evt);
"""
def save(self):
print "start...",self.mm
data = self.webView.page().currentFrame().documentElement().toInnerXml()
self.textx = data
while True:
if len(self.textx)>0:
print "wang cheng"
break
open("htm0.txt","w").write(data)
print 'start...'
if self.p==1:
userx = "[email protected]"
pwdx = "123456789"
jss = "document.getElementsByName('username')[0].value='"+ userx +"';document.getElementsByName('password')[0].value='"+ pwdx +"';document.getElementsByName('password')[0].focus();"
print jss
self.webView.page().mainFrame().evaluateJavaScript(jss)
elem = self.webView.page().mainFrame().findAllElements("a[tabindex='6']")
if len(elem)==1:
print 'elem len:',len(elem)
#elem[0].evaluateJavaScript(self.js_click)
#elem[0].evaluateJavaScript("this.value=123456789;")
sa= unicode(data).encode("utf8")
open("htm1.txt","w").write(sa)
self.p=7
self.mm=0
if self.p==7:
self.timeoutTimer.stop()
self.mm=self.mm+1
print "finish......end",self.p,self.mm
#self.app.processEvents()
#self.app.quit()
#sys.exit()
def timetest(self):
self.timeoutTimer = QTimer()
self.timeoutTimer.start(4000)
self.timeoutTimer.timeout.connect(self.save)
#self.timeoutTimer.stop()
def loadx(self):
self.finishedx =False
#self.webView.loadFinished.connect()
self.webView.load(QtCore.QUrl(self._url))
def crawl(self):
#QtCore.QObject.connect(self.webView,QtCore.SIGNAL("loadFinished(bool)"),self.timetest())
self.webView.loadFinished.connect(self.timetest)
#self.webView.loadProgress.connect(self.print_percent)
self.webView.load(QtCore.QUrl(self._url))
self.webView.show()
#sys.exit()
app = QtGui.QApplication(sys.argv)
s = Sp("http://weibo.com/",app)
s.crawl()
#while not s.finishedx:
# app.processEvents()
# time.sleep(0.01)
print "ok ok 0"
sys.exit(app.exec_())
timetest函数是打开网址延时4秒, 等所有东西加载完毕。
换成自己的登录帐号和密码,
然后注释这行: #elem[0].evaluateJavaScript(self.js_click) , 才可以提交的
关于python的qtwebkit国内资料还是少,好在我的英语基础还是不错,google翻译辅助下,终于在国外找到点能用的资料.
继续学习qtwebkit去…
源文件: sweibo_1.py