Broken pipe error selenium webdriver, when there is a gap between commands? Broken pipe error selenium webdriver, when there is a gap between commands? selenium selenium

Broken pipe error selenium webdriver, when there is a gap between commands?


This is a known bug of the latest build v0.21.0 of geckodriver matched with the latest version of selenium v3.11

To work around this bug either:a) downgrade geckodriver to v0.20.1 or earlier b) wait for the bugfix/mitigations be rolled out in the upcoming versions of selenium and/or geckodriver

This bug originates from newly added support in v 0.21 of Keep-Alive feature. However, the default timeout from geckodriver in 0.21 is set to 5s, which is exceptionally short.

This bug is tracked here for geckodriver and here for selenium.


This error message...

BrokenPipeError: [Errno 32] Broken pipe

...implies that the GeckoDriver server process has received a SIGPIPE while writing to a socket. BrokenPipeError usually happens when a process tries to write to a socket which is fully closed on the client side. This may be happening when the GeckoDriver server process doesn't wait till all the data from the server is received and simply tries to close the socket (using close function)it had opened with the client.

Here you can find a detailed discussion on How to prevent errno 32 broken pipe?

Solution

  • Moving forward as you are invoking click() on your desired element you need to induce WebDriverWait for the element to be clickable as follows:

    driver.get(url)WebDriverWait(driver, 20).until(EC.element_to_be_clickable((By.XPATH, "xpath"))).click()

Note : You have to add the following imports :

from selenium.webdriver.support.ui import WebDriverWaitfrom selenium.webdriver.common.by import Byfrom selenium.webdriver.support import expected_conditions as EC
  • Again, the BrokenPipeError can also occur if your request is blocked or takes too long and after request-side (server) timeout. The server may close the connection and then, when the response-side (client) tries to write to the socket, it may throw a BrokenPipeError. Inthis cases you can set page_load_timeout as follows:

    driver.set_page_load_timeout(3)

Here you can find a detailed discussion on How to set the timeout of 'driver.get' for python selenium 3.8.0?


In the recent release, they have the issue, upgrade the selenium with latest release

pip install -U selenium