Python 使用PhantomJS发送密钥问题,但不使用Firefox

Python 使用PhantomJS发送密钥问题,但不使用Firefox,python,selenium,firefox,upload,phantomjs,Python,Selenium,Firefox,Upload,Phantomjs,我目前正在使用Selenium和Python将文件自动上传到网站。我总是使用Firefox浏览器测试我的代码,因为这样我可以看到幕后发生的事情。好的,一切都很好。图像会自动上传,结果会显示在那里。但是当我换浏览器的时候。使用PhantomJS,当我向元素(文件上传元素)发送_键时,请求似乎被卡住了 我使用以下代码: '''Image Upload''' upload_photo_element = driver.find_element_by_xpath(upload_photo_field_

我目前正在使用Selenium和Python将文件自动上传到网站。我总是使用Firefox浏览器测试我的代码,因为这样我可以看到幕后发生的事情。好的,一切都很好。图像会自动上传,结果会显示在那里。但是当我换浏览器的时候。使用PhantomJS,当我向元素(文件上传元素)发送_键时,请求似乎被卡住了

我使用以下代码:

'''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的不仅仅是你一个人

输入字段是否可见?有些站点会隐藏输入字段,并显示另一个可以根据需要设置样式的元素。这样做可以防止使用IE11上传文件——PhantomJS可能也是这样。您可以先尝试使字段可见。你如何做到这一点取决于它是如何隐形的。确保它没有被隐藏,也没有应用任何CSS样式来隐藏它

:

由于uploadFile在PhantomJS中被破坏,所以您需要避免使用它。如何做到这一点取决于PhantomJS是否与测试运行在同一台机器上

如果是本地的,您可以直接使用PhantomJS驱动程序。如果需要使用远程驱动程序,或者如果PhantomJS正在远程运行,则需要对驱动程序进行修补,使其表现为在本地运行

对于Python Web驱动程序,您可以通过将Web驱动程序上的属性_is_remote设置为False来实现这一点。见资料来源。然后,您的代码将如下所示:


感谢您的回复@Mark Lapierre。我必须在“远程Web驱动程序”上测试这个吗?因为当我复制你的代码时,我得到了一个错误。webdriver上不存在远程属性。输入字段不隐藏。“上传文件时遇到问题”这篇文章似乎与我的问题相匹配,它适用于npm、python 3.5.2和selenium 3.3.3中的phantomjs预构建2.1.14。您使用的是什么版本的PhantomJS、Python和Selenium?此外,“文件上传困难”实际上是三个独立的链接。每个单词都是一个链接。其他链接之一可能会有所帮助。不,您不需要使用远程Web驱动程序。我使用的是PhantomJS版本2.1.1、python 2.7.10和selenium(3.3.3)。'文件'似乎符合我的问题,抱歉不清楚。谢谢你的帮助。顺便说一句,我很感激。这个网站是公开的吗?如果没有,你能发布HTML吗?
is_remote = webdriver._is_remote
webdriver._is_remote = False
webdriver.find_element_by_css_selector('input').send_keys(filepath)
webdriver._is_remote = is_remote