Я пытаюсь автоматизировать веб-сайт для выполнения некоторых повседневных задач с помощью python селена. Мне нужно загрузить файл в процессе. Я провел некоторое исследование по этому поводу и понял, что когда люди проверяют кнопку «выбрать файл», он имеет тип «файл». Для меня есть разновидность "кнопки". Поэтому я попытался изменить тип на файл, и все заработало. Но, конечно, мне не нужно каждый раз менять код html. Вот мой код:
brow = driver.find_element_by_xpath('//*[@id="app"]/div[1]/div/div[3]/div/div[3]/div/div/div/div[1]/div/div[2]/form/fieldset/div[1]/div[2]/button').send_keys('/Users/test/Subtitle_1.srt')
Если вам интересно, какую ошибку я получаю, когда запускаю это хорошо, я ничего не получаю и ничего не происходит. Так как это кнопка типа, я попытался нажать на нее, а затем отправить ключи для загрузки файла:
brow = driver.find_element_by_xpath('//*[@id="app"]/div[1]/div/div[3]/div/div[3]/div/div/div/div[1]/div/div[2]/form/fieldset/div[1]/div[2]/button').click()
brow.send_keys('/Users/test/Subtitle_1.srt')
, и это дало мне ошибку:
Traceback (most recent call last):
File "test.py", line 110, in <module>
brow.send_keys('/Users/test/Subtitle_1.srt')
AttributeError: 'NoneType' object has no attribute 'send_keys'
Кто-нибудь знает как я могу загрузить файл с помощью кнопки типа?
введите описание изображения здесь
Еще одна вещь, которая поможет вам ответить на мой вопрос, вот код, который работает, он работает только потому, что файл выбора btn содержит type = "file". Не стесняйтесь попробовать код (измените путь к файлу):
#import modules
from selenium import webdriver
from selenium.webdriver.common.action_chains import ActionChains
from selenium.webdriver.common.by import By
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.common.keys import Keys
import time
driver = webdriver.Chrome(executable_path='/Users/test/Desktop/chromedriver')
driver.get('https://cgi-lib.berkeley.edu/ex/fup.html')
time.sleep(2)
driver.find_element_by_xpath('/html/body/form/input[1]').send_keys('/Users/test/Subtitle_1.srt')
time.sleep(2)
driver.find_element_by_xpath('/html/body/form/input[3]').click()