OSError: [WinError 6] Неправильная ошибка дескриптора при использовании Selenium до Python - PullRequest
1 голос
/ 03 марта 2020

Можете ли вы помочь мне с моим кодом? Я хочу разобрать телефонные номера, но мне нужно активировать кнопку нажатием. Но эта кнопка с тегом, и это проблема для меня. Как я могу это исправить?

from selenium import webdriver
from selenium.webdriver.common.keys import Keys
from selenium.webdriver.common.action_chains import ActionChains
#from selenium.webdriver.common.touch_actions import TouchActions
#import org.openqa.selenium.interactions.Actions


#TouchActions.tap
def main():
    driver = webdriver.Chrome()
    remote = driver.get("https://www.olx.ua/uk/obyavlenie/68200jk71a-torpedo-pod-airbag-infiniti-g-07-14-infiniti-IDGRpUS.html#d97e6d976d;promoted")
    bt_elem = driver.find_elements_by_id("postNewAdLink")
    #print(bt_elem[0])
    #driver.find_elements_by_class_name("contact-button").click()
    #ActionChains(driver).move_to_element(bt_elem).perform().click()

    #bt_elem.get(0).click()
    #TouchActions.tap(bt_elem)

main()

Ошибка:

Traceback (most recent call last):
  File "C:\Users\radus\AppData\Local\Programs\Python\Python38\lib\subprocess.py", line 945, in __del__
    self._internal_poll(_deadstate=_maxsize)
  File "C:\Users\radus\AppData\Local\Programs\Python\Python38\lib\subprocess.py", line 1344, in _internal_poll
    if _WaitForSingleObject(self._handle, 0) == _WAIT_OBJECT_0:
OSError: [WinError 6] Wrong descriptor

Ответы [ 2 ]

0 голосов
/ 04 марта 2020

Это сообщение об ошибке ...

  File "C:\Users\radus\AppData\Local\Programs\Python\Python38\lib\subprocess.py", line 945, in __del__
    self._internal_poll(_deadstate=_maxsize)
  File "C:\Users\radus\AppData\Local\Programs\Python\Python38\lib\subprocess.py", line 1344, in _internal_poll
    if _WaitForSingleObject(self._handle, 0) == _WAIT_OBJECT_0:
OSError: [WinError 6] Wrong descriptor

... подразумевает наличие ошибки с командой subprocess.Popen().


Согласно обсуждению в Selenium 3.5.0-GeckoDriver 0.18.0- Python 3.6.1: «OSError: [WinError 6] дескриптор недействителен», в то время как close () вызывается через Python PyDev (Eclipse) unittest module эта проблема наблюдалась даже при вызове модулей self.driver.close() - Python * .

This is because there is no stdin defined in the `service.py` file for the `subprocess.Popen()` command. Underwater the subprocess tries to create a handle which also looks for stdin under Windows this gets a bit tricky when using `Bash` or `cx_Freeze`. So, `stdin` was defined as well, and the crash is gone. Optionally you can also use:

FNULL = open(os.devnull, 'r')
subprocess.Popen(.... ,stdin=FNULL)

Solution

Решение было объединено с Также определите стандартный ввод или оно будет обрабатывать sh при Python + cx_Freeze: WindowsErro… запрос на получение и было доступно в Selenium v3.8.1

В идеале вам нужно убедитесь, что:

  • Selenium обновлен до текущих уровней Версия 3.141.59 .
  • ChromeDriver обновлен до текущего ChromeDriver v80.0 уровня.
  • Chrome обновлен до текущего Chrome версии 80.0 уровня. (согласно примечаниям к выпуску ChromeDriver v80.0 )
  • Очистка вашего Рабочего пространства проекта через IDE и Перестройте ваш проект только с необходимыми зависимостями.
  • Всегда вызывайте driver.quit() в методе tearDown(){}, чтобы закрыть и уничтожить WebDriver и Веб-клиент экземпляров. изящно.

tl; dr

subprocess.Popen._cleanup () Ошибка "Недопустимый дескриптор", когда какой-то старый процесс завершен

0 голосов
/ 03 марта 2020

Ваш код выглядит нормально ... Ваша среда выглядит подозрительно. Если бы я рискнул предположить (так как это модуль подпроцесса жаловался), возможно, Selenium не может найти chrome .exe в вашем PATH. Chrome открывается перед этим исключением?

...