我必须上传文件(drop zone -> click ->open window to choose file)
我试过了:
addphoto.send_keys("C:\\files\\file.jpg")
但它不起作用。打开新窗口有没有机器人处理?
答案 0 :(得分:2)
一般来说,没有。
Selenium只能运行您的网络浏览器。单击任何打开文件浏览器窗口的元素时,此窗口由操作系统提供,而不是Web浏览器。这就是为什么你不能在硒中与它互动的原因。
如果您的网页接受拖放操作,可能会通过使用sendkeys发送类似file:// path / to / your / file之类的内容来欺骗它,因为这就是拖拽和实际上是drop,然后使用动作链将鼠标移动到元素并执行" drop"通过向元素发送释放按钮事件。请参阅示例Unable to perform click action in selenium python
了解如何使用动作链的想法。
但这是出了名的不可靠。如果你打算自动发布帖子,比如说社交媒体网站,你可能运气不好,因为他们的上传机制在使用机器人防止垃圾邮件方面要复杂一些。
您可能想要研究允许控制计算机的整个GUI而不仅仅是浏览器的工具。然后,您可以使用Selenium尝试找到拖放字段的绝对位置,并将其提供给外部自动播放器脚本,该脚本会单击您的图像,将其拖放到该位置并将其放在那里。
哈努哈利
答案 1 :(得分:2)
我做到了! 只需点击安装-U pyautoit
然后
import autoit
autoit.win_wait_active("File Upload", 5)
autoit.send(os.path.join("path"))
autoit.send("{ENTER}")
工作正常:)
答案 2 :(得分:1)
在dropzone隐藏输入中放置文件名可以正常工作。这应该让你去。
upload_file = driver.find_element_by_css_selector('.dz-hidden-input')
data_file = Path(__file__).parent / "test_file.txt"
logging.debug("data_file: %s", data_file)
assert data_file.exists()
upload_file.send_keys(str(data_file))
assert driver.find_element_by_css_selector('.dz-image').is_displayed()
答案 3 :(得分:0)
@Janusz Skonieczny的回答对我来说很好。 您需要当前的webdriver才能使该解决方案正常工作。如果您手边没有该变量,则可以按以下方式获取它。
from robot.libraries.BuiltIn import BuiltIn
def get_webdriver_instance():
se2lib = BuiltIn().get_library_instance('SeleniumLibrary') #'or Selenium2Library'
return se2lib.driver