Загрузка файла на сайт через кнопку загрузить файл

selenium
python
Теги: #<Tag:0x00007fedb822c290> #<Tag:0x00007fedb822c150>

(Максим Рублёв) #1

Здравствуйте! Пытаюсь на сайте загрузить файл,организована загрузка на нём-1)нажимаем кнопку загрузить-2)Выбираем файл -3)Нажимаем загрузить на сайт
Почитал говорят данная проблема решается просто, находим элемент и посылаем в него через send_keys(“Путь\к\нашему\файлу”), собственно,что я и пытаюсь сделать,но у меня не работает данный метод. Пример кода:
##Копия ОСАГО
##

//*[@id=“Form253201331.FormStep9.Panel600.Panel3905.file4:upload”]
try:
DownloadOSAGO= WebDriverWait(driver, 25).until(
EC.element_to_be_clickable((By.XPATH, “//a[@id=‘Form25011.FormStep50.Panel51.passport_copy:upload’]”)))
DownloadOSAGO.send_keys(“C:\Users\maxim.rublev\Desktop\IMG_1406.JPG”)
except:
print(“Файл не загрузился на сайт” + XPATH)


(rmerkushin) #2

Во-первых, экранируйте слеши, во-вторых, если не поможет, попробуйте другой wait использовать. Xpath точно правильный? Кнопку загрузки нажимали после этого?)


(Максим Рублёв) #3

Другой wait это увеличить время?пытался ещё методом писали,что попробовать в невидемое поле input-"//*[@id=“p1b6q3774ogu11nhlq5j32m12l71_html5”]" пробовать посылать путь к файлу,но тоже не получается.
"//a[@id=‘Form25011.FormStep50.Panel51.passport_copy:upload’])))-получил такой xpath через selenium IDE
Какую кнопку загрузки?Если кликать в окно открытия диалога загрузки,оно открывается,но дальше процесс встаёт.


(Максим Рублёв) #4

Подскажите может кто знает такую вещь у этого невидимого поля постоянно изменяется его ID после перезагрузки страницы выше писал его прошлый после перезагрузки стал таким-" //*[@id=“p1b6qf8u0o186s1s8kahj15b310081_html5”]"


(rmerkushin) #5

После того как вы указали в input путь к файлу вам нужно засабмитить форму, а для этого нужно нажать на кнопку или совершить еще какое-то магическое па, зависит от реализации :slight_smile: Да, и вы могли ошибиться с input’ом, их бывает несколько штук иногда для одной сущности. По поводу динамического ID у input, попробуйте привязаться к чему-то другому, xpath он могучий :slight_smile:


(Сержан Есенбек) #6

получиться ли так сделать ?

File cv = new File(“C:/Users/serzhan/Test.docx”);
$(By.id(“PGU-FiledUploadButton”)).uploadFile(cv);


(Максим Рублёв) #7

Подскажите пожалуйста,как вообще составляют XPATH элемента,я знаю есть куча ссылок но всё может подскажешь метод вкраце?я пока только захожу в браузер и могу посмотреть код и скопировать XPATH.Могу ещё скинуть сохранённую HTML


(Ильдар Бекмансуров) #8

Уделите немного времени этому отличному мануалу.


(Lev Yarushin) #9

Насколько я понимаю - у вас есть скрытый input для загрузки файла. Поэтому надо его найти, сделать видимым и потом уже отправлять путь.


(Максим Рублёв) #10

Спасибо огромное вам читаю очень полезная информация!


(Максим Рублёв) #11

Не знаю точно может и работает у вас у меня нет, скорее всего потому-что пишу не так что-то. File cv мне получается нужно объявить как функцию и потом её использовать? Зачем тут знак $ я тоже не особо понял.


(Максим Рублёв) #12

Сделал таким образом всё заработало, спасибо всем, кто отписался в тему,может кому будет полезно попробуйте так же я сам долго мучился по незнанию.
PassportCopy=driver.find_element_by_xpath("//input[@type=‘file’]")
PassportCopy.send_keys(“C:\Users\maxim.rublev\Desktop\IMG_1406.JPG”)

По такому Xpath загрузил файл:
1)Берём за локатор атрибут type скрытого поля, который содержит значение ‘file’
2)Посылаем туда путь через send_keys(“с:\наш\файл”)
3)Не нажимая кнопки загрузить переходим на следующий шаг элемент подгружается успешно