用selenium webdriver python上传文件

时间:2016-03-31 16:11:21

标签: python selenium selenium-webdriver

我想使用webdriver来挑选文件,但是按照其他答案它们不起作用。他们说只需给按钮一个文件路径,这并没有做任何事情。单击按钮后上传如下所示:

enter image description here

这是其他人所说的,但不起作用:

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

如果我在webdriver实例中提交文件怎么办?谢谢

4 个答案:

答案 0 :(得分:2)

尝试使用AutoIT。

它非常易于使用并完成工作。

首先使用webdriver脚本单击“上载”按钮,然后使用以下命令运行AutoIT .exe文件:

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");

编写完脚本后,右键单击该文件并选择“编译脚本”,这将创建一个.exe文件。

答案 1 :(得分:2)

我也遇到使用Python和Selenium上传的问题。 这是因为上传网页表单不可见,位于“上传图片”下。 (隐藏的上传表格)

所以我做了解决方法。

# 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')
祝你好运。

答案 2 :(得分:1)

uploading photos to Craigslist with Python and Selenium

解决了这个问题
def add_photo(self, filepath_to_photo):
    photo_filepath_input_box = self.driver.find_element_by_xpath("//input[@type='file']")
    photo_filepath_input_box.send_keys(filepath_to_photo) # "/home/cchilders/photos/myhouse/upperrightbedroom/photo1.png"

答案 3 :(得分:0)

上传窗口是系统窗口,而不是在webview中。 Selenium webdrivers只能控制webview中的内容。您需要将选择文件的任务交给另一个库,如AutoIT。