2012-06-16 25 views
6

Tôi muốn sử dụng PyQt/QWebview để 1) tải một url cụ thể, 2) nhập thông tin vào biểu mẫu, 3) nhấp vào nút/liên kết. Cơ chế không hoạt động vì tôi cần trình duyệt thực.Điền vào biểu mẫu bằng PyQt và QWebview

Dưới đây là mã của tôi:

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_()) 

Các tải trang một cách chính xác, nhưng không có đầu vào được nhập và hình thức không được nộp. Bất kỳ ý tưởng?

Trả lời

0

Bạn có thể làm điều đó với Webkit/QWebView nhưng điều gì về việc sử dụng selenium: http://code.google.com/p/selenium/? Nó được thiết kế cho chính xác loại tự động hóa trình duyệt này và có các ràng buộc python đẹp.

6

này đã giúp tôi để làm cho nó làm việc:

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

Thuộc tính và tài sản là những thứ khác nhau.

hơn Một sửa chữa:

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

setCông trình thuộc tính – Like

0

Đối với bất cứ ai tìm cách để làm điều này với PyQt5, ví dụ này có thể giúp như một vài điều đã thay đổi. Rõ ràng javascript cần phải được điều chỉnh dựa trên nội dung của trang web.

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 
Các vấn đề liên quan