0

我正在尝试使用 PyQt 提交表单。我开始通过 Spynner 使用它,但我在我的 repl 中将其解构为原始的 PyQT 调用自己来尝试调试问题。

>>> obr.webframe.findAllElements('.qust input').toList()
[<PyQt4.QtWebKit.QWebElement object at 0xa343f7c>, <PyQt4.QtWebKit.QWebElement object at 0xa343fb4>]
>>> 
>>> elem = obr.webframe.findAllElements('.qust input').toList()[1]
>>> elem.setFocus()
>>> elem.evaluateJavaScript("this.click()") 

当这不起作用时,我从 Spynner 中调用点击事件的方法中提取了这个片段,这也不起作用:

>>> jscode =
"var e = document.createEvent('MouseEvents');e.initEvent( 'click', true, true );this.dispatchEvent(e);"
>>> 
>>> elem.evaluateJavaScript(jscode)

最后:

>>> obr.webframe.findFirstElement('form')
<PyQt4.QtWebKit.QWebElement object at 0xa34387c>
>>> obr.webframe.findFirstElement('form').evaluateJavaScript('this.submit();')
<PyQt4.QtCore.QVariant object at 0xa343f44>
>>> 

在所有情况下,它都会立即返回。不发布表格。形式正常:

>>> obr.webframe.findFirstElement('form').attribute('action')
PyQt4.QtCore.QString(u'SubmitPage.aspx?g=d7a717c38&ust=72a0fc7b&nm=01f00&se=53')
>>> obr.webframe.findFirstElement('form').attribute('method')
PyQt4.QtCore.QString(u'post')

如果有人有任何想法或建议,我将不胜感激。正如你所看到的,我一直在这里抓住稻草。不是我喜欢的调试风格...

4

1 回答 1

0

您应该使用单击解决方案,因为这将确保如果页面在单击提交按钮时执行了一些 javascript 代码,它也会被调用。它可以更改甚至向帖子数据添加其他字段。通常您使用的代码是正确的,请尝试使用以下代码段启动 javascript click 事件:

elem = obr.webframe.findAllElements('.qust input').toList()[1]
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);
           """
elem.evaluateJavaScript(js_click)
于 2012-09-10T06:28:20.143 回答