您应该发送鼠标点击事件来输入点坐标。这是执行此操作的 PyQt 代码。
# We need to scroll our window, to make input "visible" and get it's coordinates
el_pos = el.geometry().center() # el - QWebElement points to input
self._page.mainFrame().setScrollPosition(el_pos) # self._page - QWebPage
scr_pos = self._page.mainFrame().scrollPosition()
point_to_click = el_pos - scr_pos
# Create click on coordinates
press = QMouseEvent(QMouseEvent.MouseButtonPress, point_to_click, Qt.LeftButton, Qt.LeftButton, Qt.NoModifier)
release = QMouseEvent(QMouseEvent.MouseButtonRelease, point_to_click, Qt.LeftButton, Qt.LeftButton, Qt.NoModifier)
QApplication.postEvent(self._handler, press) # self._handler - QWebView
QApplication.postEvent(self._handler, release)
选择文件对话框“打开”后,Qt 调用QWebPage.chooseFile() 函数来获取文件名,应该选择该文件名。我们需要在 out QWebPage 中重新实现这个方法:
class WebPage(QWebPage):
def __init__(self):
QWebPage.__init__(self)
self.file_name = 'test.png' # file name we want to be choosed
def chooseFile(self, frame, suggested_file):
return self.file_name # file will be choosen after click on input type=file
更新:
还有一件事。如果输入允许选择多个文件,重新实现 QWebPage.chooseFile() 将不起作用。要处理这个问题,您应该添加对QWebPage::ChooseMultipleFilesExtension 的支持。这里是simple example 怎么做。