我想使用PyQt / QWebview来1)加载特定的URL,2)将信息输入表单,3)单击按钮/链接。 Mechanize不起作用,因为我需要一个实际的浏览器。
这是我的代码:
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_())
页面正确加载,但未输入任何输入且未提交表单。有什么想法吗?
答案 0 :(得分:6)
这帮助我实现了目标:
user.setAttribute("value", "email@email.com")
-->
user.evaluateJavaScript("this.value = 'email@email.com'")
属性和属性是不同的东西。
还有一个问题:
click() --> this.click()
答案 1 :(得分: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
答案 2 :(得分:0)
您可以使用Webkit / QWebView进行操作但是使用selenium:http://code.google.com/p/selenium/怎么办?它专为这种浏览器自动化而设计,具有很好的python绑定。