I am working on a browser automation project in Python using selenium. I am trying to upload a picture to a page. I login, go to the page, and click the upload button. After cli
Here's an idea for doing a file upload without popping the chooser:
filename = 'x.jpg'
with open(filename, "rb") as file:
content = base64.b64encode(file.read()).decode('utf8')
mimeType = "image/jpeg"
selector = "input[type=file]"
driver.execute_async_script("""
const [filename, content, mimeType, selector, cb] = arguments
const dt = new DataTransfer()
const response = await fetch(`--data:${mimeType};base64,${content}`)
const file = new File([await response.blob()], filename)
dt.items.add(file)
const element = document.querySelector(selector)
element.files = dt.files
element.dispatchEvent(new Event('input', { bubbles: true }))
cb()
""", filename, content, mimeType, selector)
driver.find_element_by_css_selector('input[type=submit]').click()
Also you might want to think about switching to Puppeteer for things like this because Selenium is not likely to ever have a good implementation of this.