2011-12-29 33 views
29

có khả năng nào để tải lên hình ảnh trên web bằng công cụ kiểm tra selen không? Tôi đang sử dụng python.Cách tải lên tệp (hình ảnh) với selen, python

Tôi đã thử nhiều thứ, nhưng không có gì không hoạt động. Tôi tuyệt vọng.

Tải lên trông như thế này:

http://img21.imageshack.us/img21/1954/uploadgr.jpg

Cảm ơn bạn đã giúp đỡ của bạn

Filip.

+0

Tôi đã đăng [câu trả lời tại đây bằng python] [1]. [1]: http://stackoverflow.com/a/11872608/471376 – JamesThomasMoon1979

Trả lời

4

Điều khiển đầu vào tải lên mở hộp thoại gốc (trình duyệt được thực hiện bởi trình duyệt) để nhấp vào nút điều khiển hoặc duyệt qua Selenium sẽ chỉ bật hộp thoại và kiểm tra sẽ treo.

Giải pháp thay thế là đặt giá trị của đầu vào tải lên qua JavaScript (trong Java nó được thực hiện qua JavascriptExecutor) và sau đó gửi biểu mẫu.

Xem this question cho mẫu trong C#, tôi chắc chắn đó cũng là một cách để gọi JavaScript trong Python nhưng tôi không bao giờ sử dụng Selenium Python bindings

+0

Đây không phải là một giải pháp hợp lệ, xem https://stackoverflow.com/questions/29720794/jquery-select-input- file-and-cũng-set-it-to-another-input – Will

79

Những gì tôi đang làm là thế này (chắc chắn DRV là một thể hiện của webdriver):

drv.find_element_by_id("IdOfInputTypeFile").send_keys(os.getcwd()+"/image.png") 

và sau đó tìm nút gửi của bạn và nhấp vào đó.

+7

Đây phải là câu trả lời được chấp nhận. –

+0

Có Điều này phải là câu trả lời được chấp nhận! –

+0

Bạn có thể vui lòng giải thích những gì 'os.getcwd()' làm và trong ví dụ của bạn 'image.png' nằm trên hệ thống tệp của bạn. – ChickenFeet

4

Tất cả các cách tiếp cận này sẽ không hoạt động với người tải lên hình ảnh hiện đại trong olx !!! Cách tiếp cận thay thế (chỉ dành cho cửa sổ)

1. Automation of windows can be done using Autoit 
2. Install Autoit and SciTe Script editor 
3. Autoit code :(imageupload.au3) 

WinActivate("File Upload"); for chrome use "open" that is the name of the window that pops 
send("D:\images\image1.png"); path of the file 
Send("{ENTER}") 

4. compile it to get an .exe file(imageupload.exe) 
5. Now from python call the .exe file like 

import os 
import os.system('C:\images\imageupload.exe') #path of the .exe file 
+0

bạn có thể đưa ra một ví dụ rõ ràng không, bạn có nhập khẩu exe không và bạn gọi nó như thế nào? – 2one2

+0

Không! tạo một tệp tự động mới với ba dòng mà tôi đã đưa ra trong điểm thứ 3 của mình. Hãy tham khảo điều này để chuyển đổi nó thành tệp .exe https://www.autoitscript.com/autoit3/docs/intro/compiler.htm sau đó bạn có thể gọi tệp exe từ tập lệnh python bằng cách sử dụng hai dòng tôi đã đưa ra ở điểm thứ 5 – saravanan

0

Tôi đã sử dụng định dạng tập lệnh bên dưới để tải lên hình ảnh. Điều này có thể giúp bạn.

Imagepath=os.path.abspath('.\\folder1\\subfolder2\file1.jpg') 
    driver.find_element_by_id("Id of the element").clear()    
    driver.find_element_by_id("Id of the element").send_keys(Imagepath) 

nếu bạn không có ID của đối tượng, thì bạn có thể sử dụng bộ chọn xpath hoặc css cho phù hợp.

1
import win32com.client 

shell = win32com.client.Dispatch("WScript.Shell") 
shell.Sendkeys("C:\text.txt") 
shell.Sendkeys("~") 

sẽ giải quyết vấn đề

+0

Xin chào tôi cần sự giúp đỡ của bạn ở đây, tôi đang cố gắng để tải lên tập tin hình ảnh và sử dụng mã này nhưng không hoạt động để chọn file.its không cháy nhập sự kiện hoặc phím tab. Bạn có thể giúp tôi không? –

0

Tôi đang sử dụng fine-uploader, chạy thử nghiệm selen với pytest và điều này đã làm việc cho tôi:

elm = driver.find_element_by_xpath("//input[@type='file']") 
    elm.send_keys(os.getcwd() + "/tests/sample_files/Figure1.tif") 

Không gửi biểu mẫu hoặc phím Enter là cần thiết trong trường hợp của tôi.

Cảm ơn tất cả các câu trả lời! Nó đã giúp rất nhiều!

0

Sử dụng splinter:

browser.attach_file ('file_chooser_id', fully_qualified_file_path)

1

tôi đã thêm một câu trả lời cho bất cứ ai muốn sử dụng thỏa thuận với msofiledialogs gây phiền nhiễu. Điều này là làm việc ra khỏi giải pháp đề xuất của saravanan, nhưng nhiều thịt cho Python.

Tôi gặp sự cố tương tự với tập lệnh mà tôi đang làm việc cho một công ty ở bên cạnh.Tôi đang cố gắng tải lên tài liệu cho khách hàng của công ty, nhưng do cách trang web của họ hoạt động, tôi không thể sử dụng send_keys để gửi trực tiếp đường dẫn, vì vậy tôi phải dựa vào msofiledialog.

  1. Bạn chỉ cần phải cài đặt AutoIt https://pypi.python.org/pypi/PyAutoIt/0.3 hoặc chỉ "PIP cài đặt -U pyautoit" thông qua màn hình cmd

  2. gõ "nhập khẩu AutoIt" ​​trên trang kịch bản của bạn

  3. Loại sau trước khi hộp thoại tệp bật lên trong tập lệnh của bạn:

    autoit.win_active ("Mở") autoit.control_send ("Mở", "Chỉnh sửa1", r "C: \ Users \ uu \ Desktop \ TestUplo ad.txt ") autoit.control_send (" Open", "Edit1", "{ENTER}")

Nó sẽ tìm kiếm các cửa sổ hộp thoại tập tin mở và điền nó ra và nhấn Enter. "Mở" là tiêu đề của màn hình hộp thoại tệp của tôi. Đặt tiêu đề của bạn thay cho "Mở". Có nhiều cách sáng tạo hơn để sử dụng các chức năng của AutoIt, nhưng đây là một cách dễ dàng, đơn giản cho người mới bắt đầu.

Chỉnh sửa: KHÔNG. KHÔNG sử dụng control_send trên hầu hết mọi thứ nếu bạn có thể tránh nó. Nó có một vấn đề nổi tiếng của việc gửi văn bản sai. Trong trường hợp của tôi, dấu hai chấm trong đường dẫn tập tin của tôi đã được biến thành một dấu chấm phẩy. Nếu bạn cần gửi các khóa đầu vào, nó sẽ ổn, tuy nhiên nếu bạn cần gửi văn bản, hãy sử dụng control_set_text. Nó có cùng cú pháp.

autoit.control_set_text("Open","Edit1",r"C:\Users\uu\Desktop\TestUpload.txt") 
Các vấn đề liên quan