PyQt - Форма не отправляется

Я пытаюсь отправить форму, используя PyQt. Я начал использовать его через Spynner, но в своей реплике я разобрал это просто на необработанные вызовы 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, который вызывает событие click, которое также не сработало:

>>> 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')

Если у кого-то есть какие-либо мысли или предложения, я буду СУПЕР благодарен. Как видите, я просто цепляюсь за соломинку здесь. Не мой предпочтительный стиль отладки...

1 ответ

Решение

Вы должны пойти с решением для щелчка, так как это гарантирует, что если на странице есть какой-то код JavaScript, выполняемый при нажатии кнопки отправки, он также будет вызван. Он может изменить или даже добавить дополнительные поля к данным поста. Обычно код, который вы использовали, является правильным, попробуйте запустить событие щелчка JavaScript с помощью этого фрагмента:

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)
Другие вопросы по тегам