我必须使用1GB
上传较大的文件(大小超过remote selenium server
,但出现urllib.error.URLError <urlopen error [Errno 32] Broken pipe>
错误。
这是python
代码,包括remote
驱动程序设置,如下所示:
from selenium.webdriver import ChromeOptions, Remote
options = ChromeOptions()
options.add_argument("--start-maximized")
remote = Remote(command_executor="http://localhost:9515",
desired_capabilities=options.to_capabilities())
remote.find_element_by_css_selector('input[name="file"]'
).send_keys('path/to/file.iso'))
这是我有一个追溯示例错误:
ERROR: File "/home/user/.local/lib/python3.6/site-packages/selenium/webdriver/remote/webelement.py", line 475, in send_keys
ERROR: value = self._upload(local_file)
ERROR: File "/home/user/.local/lib/python3.6/site-packages/selenium/webdriver/remote/webelement.py", line 692, in _upload
ERROR: return self._execute(Command.UPLOAD_FILE, {'file': content})['value']
ERROR: File "/home/user/.local/lib/python3.6/site-packages/selenium/webdriver/remote/webelement.py", line 628, in _execute
ERROR: return self._parent.execute(command, params)
ERROR: File "/home/user/.local/lib/python3.6/site-packages/selenium/webdriver/remote/webdriver.py", line 312, in execute
ERROR: response = self.command_executor.execute(driver_command, params)
ERROR: File "/home/user/.local/lib/python3.6/site-packages/selenium/webdriver/remote/remote_connection.py", line 472, in execute
ERROR: resp = opener.open(request, timeout=self._timeout)
ERROR: File "/usr/lib/python3.6/urllib/request.py", line 526, in open
ERROR: response = self._open(req, data)
ERROR: File "/usr/lib/python3.6/urllib/request.py", line 544, in _open
ERROR: '_open', req)
ERROR: File "/usr/lib/python3.6/urllib/request.py", line 504, in _call_chain
ERROR: result = func(*args)
ERROR: File "/usr/lib/python3.6/urllib/request.py", line 1346, in http_open
ERROR: return self.do_open(http.client.HTTPConnection, req)
ERROR: File "/usr/lib/python3.6/urllib/request.py", line 1320, in do_open
ERROR: raise URLError(err)
ERROR: urllib.error.URLError: <urlopen error [Errno 32] Broken pipe>
请注意,文件大小为70mb
以下的文件已成功上传,但是当我尝试上传较大的文件时,文件失败。
我使用python 3.6
,selenium 3.12.0
,chromedriver 2.42
和Chrome 71
。我确实尝试过使用不同的硒,chromedriver和Chrome版本,但是出现了相同的错误。
我怀疑我可以使用某些 chromeoptions 来解决此问题,但还没有找到确切的解决方法。
感谢您的帮助!
答案 0 :(得分:1)
如果您使用Remote
WebDriver,它将尝试将要上传的文件传输到远程主机(在您的情况下是从localhost
到localhost
;但是,一般逻辑是从正在运行测试的主机到正在运行浏览器的主机)。
当您上传大文件时,在上传整个文件之前,对等方的套接字已关闭。这就是为什么您看到urllib.error.URLError: <urlopen error [Errno 32] Broken pipe>
的原因。
解决方案:,您需要通过指定UselessFileDetector
remote = Remote(
command_executor="http://localhost:9515",
desired_capabilities=options.to_capabilities(),
file_detector=UselessFileDetector()
)
请注意,如果您的浏览器不在localhost
上,则在使用Selenium上传文件之前,您必须注意传输文件。
编辑:您可以详细了解Selenium如何在https://extsoft.pro/selenium-large-files-upload/上上传文件