填写使用的PyQt和QWebview形式(Filling out a form using PyQt

2019-06-25 12:57发布

我想用的PyQt / QWebview 1)加载特定的URL,2)信息输入到表格,3)单击按钮/链接。 机械化不起作用,因为我需要一个实际的浏览器。

这里是我的代码:

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@email.com")
    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_())

页面加载正确,但没有输入输入,而不是提交表单。 有任何想法吗?

Answer 1:

这帮助我,使其工作:

user.setAttribute("value", "email@email.com")
-->
user.evaluateJavaScript("this.value = 'email@email.com'")

属性和属性是不同的东西。

还有一个修正:

click() --> this.click()


Answer 2:

对于任何寻求与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@email.com'")
        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


Answer 3:

你也许可以用的Webkit / QWebView做,但怎么样使用硒: http://code.google.com/p/selenium/ ? 它是专为正是这种浏览器的自动化,并具有很好的Python绑定。



文章来源: Filling out a form using PyQt and QWebview