yan252 发表于 2016-05-10 11:25

Qwebview 连续操作网页问题

我现使用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')
      z.setAttribute('value',u'我不知道')

      z = document.findFirst('input')
      z.setAttribute('value',u'1519879021')

      btn = document.findFirst('input')
      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 。可我也不知这个应该乍么写。

求上面的两法的解决办法,或者其它方法,谢谢
页: [1]
查看完整版本: Qwebview 连续操作网页问题