如何在 Headless 浏览器中使用 selenium python 为 HTML 元素上传文件 [type=button]

How to upload file using selenium python in Headless browser for HTML element [type=button]

<button id="upload-button" class="btn btn-default ml-2 ng-pristine ng-valid ng-not-empty ng-
touched" type="button" ng-model="files" ngf-select="uploadFiles($files)" ngf-pattern="pattern" 
accept="application/pdf,application/vnd.openxmlformats-officedocument.wordprocessingml.document,text/plain,application/xml,application/x-zip-compressed" 
multiple="multiple" ngf-keep="true" ngf-valid-only="false" ngf-validate-fn="validate($file, 
invalidFiles)" ngf-model-invalid="invalidFiles" aria-invalid="false" style="">Select file(s)... </button>

这是上传文件的HTML代码。当我单击此按钮时,它会打开一个 windows 文件对话以上传文件。

我尝试了 send_keys() 方法,但它不适用于此类型=按钮

button = self.browser.find_element_by_id('upload-button')
button.send_keys(filepath)

所以我尝试了 python 库 pyautogui 来处理文件对话,但它在 Headless 浏览器中不起作用。 任何人都可以使用 python + selenium 帮助我解决这个问题,它应该可以在无头浏览器中工作。

使用 Selenium 上传文件并不是通过将文件发送到用户单击以打开上传对话框等的按钮来完成的。
页面上有一个特殊的不可见元素实际上正在接受上传的文件。
此元素可通过此 XPath 定位://input[@type='file'].
所以使用 Selenium 上传文件是通过以下方式完成的:

button = self.browser.find_element_by_xpath("//input[@type='file']")
button.send_keys(filepath)