2012-06-16 6 views
6

Я хотел бы использовать PyQt/QWebview для 1) загрузки определенного URL-адреса, 2) ввода информации в форму, 3) нажатия кнопок/ссылок. Механизация не работает, потому что мне нужен фактический браузер.Заполнение формы с использованием PyQt и QWebview

Вот мой код:

import sys 
from PyQt4.QtCore import * 
from PyQt4.QtGui import * 
from PyQt4.QtWebKit import * 
from PyQt4 import QtCore 

app = QApplication(sys.argv) 
web = QWebView() 
web.load(QUrl("https://www.lendingclub.com/account/gotoLogin.action")) 

def fillForm(): 
    doc = web.page().mainFrame().documentElement() 
    user = doc.findFirst("input[id=master_username]") 
    passwd = doc.findFirst("input[id=master_password]") 

    user.setAttribute("value", "[email protected]") 
    passwd.setAttribute("value", "password") 


    button = doc.findFirst("input[id=master_sign-in-submit]") 
    button.evaluateJavaScript("click()") 

QtCore.QObject.connect(web, QtCore.SIGNAL("loadFinished"), fillForm) 
web.show() 
sys.exit(app.exec_()) 

страница загружается правильно, но вход не будет введен, и форма не будет представлен. Есть идеи?

ответ

0

Возможно, вы сможете сделать это с помощью Webkit/QWebView, но как насчет использования селена: http://code.google.com/p/selenium/? Он предназначен для такого рода автоматизации браузера и имеет приятные привязки python.

6

Это помогло мне сделать его работу:

user.setAttribute("value", "[email protected]") 
--> 
user.evaluateJavaScript("this.value = '[email protected]'") 

Атрибут и свойство разные вещи.

еще одно исправление:

click() --> this.click() 
+0

setAttribute works – Like

0

Для тех, кто ищет, чтобы сделать это с PyQt5, этот пример может помочь, как некоторые вещи изменились. Очевидно, что javascript необходимо скорректировать на основе содержимого веб-сайта.

import os 
import sys 
from PyQt5.QtWidgets import QApplication, QVBoxLayout, QWidget 
from PyQt5.QtCore import QUrl, QEventLoop 
from PyQt5.QtWebEngineWidgets import QWebEngineView 

class WebPage(QWebEngineView): 
    def __init__(self): 
     QWebEngineView.__init__(self) 
     self.load(QUrl("https://www.url.com")) 
     self.loadFinished.connect(self._on_load_finished) 

    def _on_load_finished(self): 
     print("Finished Loading") 
     self.page().toHtml(self.Callable) 

    def Callable(self, html_str): 
     self.html = html_str 
     self.page().runJavaScript("document.getElementsByName('loginid')[0].value = '[email protected]'") 
     self.page().runJavaScript("document.getElementsByName('password')[0].value = 'test'") 
     self.page().runJavaScript ("document.getElementById('signin').click()") 

if __name__ == "__main__": 
    app = QApplication(sys.argv) 
    web = WebPage() 
    web.show() 
    sys.exit(app.exec_()) # only need one app, one running event loop 

 Смежные вопросы

  • Нет связанных вопросов^_^