- 论坛徽章:
- 0
|
我现使用QT的控件Qwebview控件来操作网页(比如:http—)
当我如图输入名字及手机号时(手机号随便输入),点击“发送验证码”时网页会弹出输入验证码窗口,
我使用QT生成在窗口,窗口上放置了一个Qwebview,并 self.webView.loadFinished.connect(self.finishLoading),如下:
class DlgWebTest(QDialog):
def __init__(self, *args, **argvs ):
super(DlgWebTest, self).__init__(*args, **argvs)
self.webView = QWebView(self)
self.webView.loadFinished.connect(self.finishLoading)
self.showMaximized()
self.webView.showMaximized()
self.first_load = True
def setUrl(self, url):
self.webView.setUrl(url)
def finishLoading(self):
# Begin document inspection.
print('finisthloading')
frame = self.webView.page().mainFrame()
document = frame.documentElement()
time.sleep(3)
self.click_send(document)
print('操作完成')
def click_send(self,document):
z = document.findFirst('input[class="name"]')
z.setAttribute('value',u'我不知道')
z = document.findFirst('input[class="tels fl phone"]')
z.setAttribute('value',u'1519879021')
btn = document.findFirst('input[class="get_yz"]')
btn.evaluateJavaScript("this.click()")
#以下显示验证码。
#得到验证码
self.get_check()
#以下输入验证码。并点确认。
现的问题我使用以上代码,能正常出现显示验证码的页面,我也但得到验证码时,得到的图片总是不对,
但我只执行到这里,然后等待这里运行完成后,我用另外一个按扭事件调用self.get_check()来得到的验证图片就是正常的,
后来研究发现,主要是在我调用得到验证码图片的函数时finishLoading还没执行完成,这时得到有图片还不对,要等待finishLoading执行完成后,得到的图片才对。
针对上面的问题,我想了两方法:
1.可不可以在上面的代码中调用( self.click_send(document) )时直接使用异步调用(试了一下,qt中能用 thread 出错),比如postevent,可在网上找了很多也没找到postevent的使用方法,这就能使用finishLoading先执行完成,而在click_send执行时取到验证码的图片。所以求异步调用事件方法;
2.连接一个槽,使用 finishLoading 完成后再操作 click_send 。可我也不知这个应该乍么写。
求上面的两法的解决办法,或者其它方法,谢谢
|
|