2016-03-31 2 views
2

Я хотел бы использовать webdriver для выбора файла, но после других ответов они не работают. Говорят, просто дайте кнопке путь к файлу, и это ничего не делает. Загрузки выглядит следующим образом после нажатия кнопки:загружать файлы с selenium webdriver python

enter image description here

Это то, что другие говорят, что делать, но не работает:

element = driver.find_element_by_name("file") 
element.send_keys("/home/pavel/Desktop/949IH3GNHAo.jpg") 

Как я могу отправить файлы, как только я в экземпляр webdriver? Спасибо

+1

Что вы подразумеваете под "не работает"? Что происходит? Не могли бы вы разместить полный код, включая URL-адрес, на который вы переходите? Благодарю. – alecxe

+1

После выбора файла изображений с помощью sendkeys вам нужно нажать кнопку «Загрузить», а не на кнопку просмотра снова –

ответ

0

Загрузить окна - это системные окна, а не веб-просмотр. Selenium webdrivers может управлять только вещами внутри веб-браузера. Вам нужно будет отложить задачу выбора файла в другой библиотеке, такой как AutoIT.

+1

Вы уверены? : https://saucelabs.com/resources/articles/selenium-file-upload –

+0

Мне не удалось заставить этот стиль работать. Я попробую еще раз. Думаю, – codyc4321

2

Дайте AutoIT попробовать.

Он очень прост в использовании и выполняет эту работу.

Нажмите на кнопку Загрузить первым со сценарием WebDriver, а затем запустить EXE-файл AutoIt с:

import subprocess 
subprocess.Popen('[name_of_your_script].exe') 

Затем дать ему wait.until, используя ожидаемые условия, поэтому он ждет, пока файл не закончит загрузку ,

код AutoIT Пример ниже выбрать файл с именем «AAUPLOADFILE.png»:

Local $hWnd=WinWait("[CLASS:#32770]","",10) 

ControlFocus($hWnd,"","Edit1") 

; Wait for 2 seconds. 

    Sleep(2000) 

    ControlSetText($hWnd, "", "Edit1", "AAUPLOADFILE.png") 

    Sleep(2000) 

; Click on the Open button 

    ControlClick($hWnd, "","Button1"); 

После того, как вы получили написал сценарий, щелкните правой кнопкой мыши на файл и выберите Compile Script, который будет создавать .exe.

+0

это кажется разумным ali. есть ли у вас какой-либо пример, который вы можете дать о том, как передать имя файла? Если мой скрипт python может передать 'FILENAME =" AAUPLOADFILE.png "и другие, я был бы в восторге. Могу ли я ответить вам? – codyc4321

+0

Другая проблема: я не использую windows – codyc4321

+1

Я никогда не использовал ubuntu/linux для автоматизации, извините, и AutoIT действительно является только приложением Windows. Я нашел это, однако, они говорят, что это эквивалент AutoIT для Linux: http://www.semicomplete.com/projects/xdotool/ – Alichino

0

Я также имел проблемы с загрузкой с помощью Python и Селен. Это потому, что загрузка веб-формы не была видна и находится под «загружаемым изображением». (скрытая форма для отправки)

Так что я сделал обходной путь.

# Try to open page with upload form 
driver.get('https://bla.com/library/browser') 

# Waiting for upload element with name upload-search-block 
WebDriverWait(driver, 10).until(EC.presence_of_element_located((By.ID, "upload-search-block"))) 

# Relocate hidden upload form using JS 
driver.execute_script("document.getElementById('upload-search-block').style.left='200px';") 
driver.execute_script("document.getElementById('upload-search-block').style.top='170px';") 

# And upload file in the end 
upload = driver.find_element_by_id('upload-search-block') 
upload.send_keys('/tmp/custom_doc.docx') 

Удачи.

Смежные вопросы