我目前正在使用Selenium和Python自动将文件上传到网站。我总是使用Firefox浏览器测试我的代码,因为通过这种方式我可以看到幕后发生的事情。好吧,一切似乎都很好。图像上传自己,结果可以看到。但是当我改变浏览器时。使用PhantomJS时,当我将send_keys发送到元素(文件上传元素)时,请求似乎会卡住。
我使用以下代码:
'''Image Upload'''
upload_photo_element = driver.find_element_by_xpath(upload_photo_field_ID)
image = os.path.join(os.getcwd(), 'images/' + 'img.png')
upload_photo_element.send_keys(image)
time.sleep(5)
upload_photo_reject_button_element = WebDriverWait(driver, 10).until(
lambda driver: driver.find_element_by_id(upload_photo_reject_button_ID))
upload_photo_reject_button_element.click()
'''End image upload'''
我不明白为什么Firefox处理这个问题没有问题。但PhantomJS呢。
有谁知道为什么会这样?
感谢。
答案 0 :(得分:0)
使用PhantomJS trouble uploading files似乎并不孤单。
输入字段是否可见?有些网站会隐藏输入字段并显示另一个可以设置样式的元素。这样做可以防止使用IE11上传文件 - PhantomJS可能是相同的。您可以尝试首先显示该字段。你如何做到这一点取决于它是如何变得不可见的。确保它没有被隐藏,并且没有任何可以隐藏它的CSS样式。
Someone else suggested another workaround:
由于在PhantomJS中打破了uploadFile,因此您需要避免使用它。如何做到这一点取决于PhantomJS是否与您的测试在同一台机器上运行。
如果是本地的,您可以直接使用PhantomJS驱动程序。如果您需要使用远程驱动程序,或者PhantomJS远程运行,您需要修补驱动程序,使其行为就像在本地运行一样。
使用Python Web Driver,您可以通过将Web驱动程序上的属性_is_remote设置为False来完成此操作。见源。您的代码将如下所示:
is_remote = webdriver._is_remote
webdriver._is_remote = False
webdriver.find_element_by_css_selector('input').send_keys(filepath)
webdriver._is_remote = is_remote