如何仅通过仅使用Python和Selenium直接上传文件来避免打开文件对话框?

问题描述 投票:0回答:1

我正在处理一个需要通过“打开文件对话框”上传文件的网站。

这里是设置:

import selenium
from selenium import webdriver
browser = webdriver.Chrome(executable_path=r"C:\Users\PC\Documents\Downloads\chromedriver.exe")
browser.maximize_window()

filename = '24_bit_fixed.wav'
folder = 'C:\\Users\\PC\\Documents\\Downloads\\'
path = folder + filename

这是棘手的部分:

NewRelease_Upload = '/html/body/ui-view/sections-list-modal/loeschen-modal/div/div[1]/div[3]/loeschen-modal-footer/button/div[1]/div[2]/span'
#browser.find_element_by_id("").send_keys(path)
#browser.find_element_by_xpath(NewRelease_Upload).send_keys(path)

我知道,如果有一个ID,我可以轻松地使用这两行,因此可以避免打开文件对话框:

browser.switch_to_frame(0)
browser.find_element_by_id("something").send_keys(path)

但是网站上既没有ID,也没有这样的框架,我正尝试仅使用selenium而不使用pywinauto

python selenium file-upload openfiledialog
1个回答
0
投票

通常,您无需弄乱打开文件对话框。通常,您需要做的就是找到<input type="file">元素。然后使用elem.send_keys('fullfilename')键入完整文件名。然后提交表格。

如果您没有一个ID可以方便地找到该元素(并且没有访问html的权限以首先插入一个ID),那么您可以尝试使用其他方法来查找该元素。例如使用xpath //input[@type='file']。这里有更多:https://selenium-python.readthedocs.io/locating-elements.html

有时网站会混入输入元素,以使其被隐藏或混淆。那么您必须求助于较重的工具。

例如,使用javascript首先“释放”输入元素:Python-Selenium "input type file" upload

或使用javascript在输入元素中键入文件名:Webdriver: File Upload

[如果您需要查找<input type="file">元素或输入文件名的帮助,请发布另一个问题,详细说明确切的问题,并发布相关的html源代码。

出于完整性:硒没有与文件打开对话框进行交互的功能。通过使用<input type="file">元素或使用gui自动化工具来避免对话框。

© www.soinside.com 2019 - 2024. All rights reserved.