我正在处理一个需要通过“打开文件对话框”上传文件的网站。
这里是设置:
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
。
通常,您无需弄乱打开文件对话框。通常,您需要做的就是找到<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自动化工具来避免对话框。