Проблема с AttributeError: объект «WebDriver» не имеет атрибута «управление» - PullRequest
1 голос
/ 21 апреля 2019

Мой код:

commentr = driver.find_element_by_id("simplebox-placeholder")
commentr.click()

driver.execute_script("document.getElementById('simplebox- 
placeholder').value = 'your comment text here';")
driver.manage().timeouts().implicitlyWait(10, TimeUnit.SECONDS);
commentr.send_keys("HELO")

Моя ошибка:

Traceback (последний вызов был последним): File «C: \ Users \ weqwwg \ Desktop \ python \ Game.py», строка 77, в driver.manage (). timeouts (). implicitlyWait (10, TimeUnit.SECONDS); AttributeError: у объекта 'WebDriver' нет атрибута 'manage'

Я пытаюсь отправить ключ в поле для комментариев на YouTube. Я удалил некоторый код, в настоящее время я использую этот код.

commentr = driver.find_element_by_id("simplebox-placeholder")
commentr.click()
driver.implicitly_wait(10)
commentr.send_keys("HELO")

Это ошибка, которую я получаю:

Traceback (most recent call last):
  File "C:\Users\Brandsdo\Desktop\python\Game.py", line 76, in <module>
    commentr.send_keys("HELO")
  File "C:\Users\Braasdasndo\AppData\Local\Programs\Python\Python37-32\lib\site-packages\selenium\webdriver\remote\webelement.py", line 479, in send_keys
    'value': keys_to_typing(value)})
  File "C:\Users\Brsadasdando\AppData\Local\Programs\Python\Python37-32\lib\site-packages\selenium\webdriver\remote\webelement.py", line 633, in _execute
    return self._parent.execute(command, params)
  File "C:\Users\Braasdasndo\AppData\Local\Programs\Python\Python37-32\lib\site-packages\selenium\webdriver\remote\webdriver.py", line 321, in execute
    self.error_handler.check_response(response)
  File "C:\Users\Braasdando\AppData\Local\Programs\Python\Python37-32\lib\site-packages\selenium\webdriver\remote\errorhandler.py", line 242, in check_response
    raise exception_class(message, screen, stacktrace)
selenium.common.exceptions.ElementNotInteractableException: Message: element not interactable
  (Session info: chrome=73.0.3683.103)
  (Driver info: chromedriver=73.0.3683.68 (47787ec04b6e38e22703e856e101e840b65afe72),platform=Windows NT 10.0.17763 x86_64)

ОБНОВЛЕННАЯ ЧАСТЬ КОДА

driver.find_element_by_id("simplebox-placeholder").click()

commentr = WebDriverWait(driver,10).until(EC.element_to_be_clickable( (By.ID, 'contenteditable-textarea') ))

commentr.click().send_keys("HELO")
driver.find_element_by_id("submit-button").click()

ЭТО ОШИБКА

Traceback (последний вызов был последним): Файл "C: \ Users \ Desktop \ python \ Game.py", строка 74, в commentr.click (). send_keys ( "HELO") AttributeError: у объекта 'NoneType' нет атрибута 'send_keys'

1 Ответ

2 голосов
/ 21 апреля 2019

Это ответ на оригинальный вопрос:

Чтобы исправить вашу непосредственную проблему, используйте

driver.implicitly_wait(10)

Руководство - там

Однако вывероятно, идут совсем не в том направлении.Вместо этого попробуйте использовать модуль WebDriverWait.

from selenium.webdriver.support.ui import WebDriverWait

Например:

from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC

#...

footer = WebDriverWait(driver, 10).until(EC.visibility_of_element_located(
   (By.CSS_SELECTOR, ".b-footer__divider"))
)

Обновление для обновленной части вопроса:

Iпытаюсь отправить ключ в поле для комментариев на YouTube.Я удалил некоторый код, в настоящее время я выполняю этот код.

Как я и подозревал, вам там вообще не нужна функция implicitly_wait.

  • Я просмотрел страницу YouTube.Ваш первый шаг правильный - вы находите поле «Добавить публичный комментарий ...» и щелкаете по нему.

  • Я пропускаю вызов implicitly_wait - он там ни на что не влияет.

  • На следующем шаге вы пытаетесь отправить нажатия клавиш в тот же ящик, который вы нашли и нажали.Это не верно.Хотя они выглядят одинаково, вы нажимаете на элемент с идентификатором simplebox-placeholder, но после нажатия этот элемент становится невидимым, и тот же элемент с идентификатором contenteditable-textarea готов получить ваш ввод.

В простом подходе вы должны найти этот элемент и послать в него нажатия клавиш:

commentr = driver.find_element_by_id("contenteditable-textarea")
commentr.click()
commentr.send_keys("HELO")

Но когда вы нажмете на simplebox-placeholder, для выполнения страницы может потребоваться некоторое времянеобходимые действия и сделайте contenteditable-textarea видимым и кликабельным.Приведенный ниже подход позволит вам избежать исключений, если элемент еще не готов:

from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC

commentr = WebDriverWait(driver,10).until(EC.element_to_be_clickable( (By.ID, 'contenteditable-textarea') ))
commentr.click()
commentr.send_keys("HELO")
  • Наконец, найдите кнопку «Комментарий» и нажмите ее, чтобы оставить свой комментарий.Здесь вы можете использовать упрощенный подход, потому что кнопка «Комментарий» уже готова:

driver.find_element_by_id("submit-button").click()

В целом ваш код может выглядеть так:

from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC

driver.find_element_by_id("simplebox-placeholder").click()

commentr = WebDriverWait(driver,10).until(EC.element_to_be_clickable( (By.ID, 'contenteditable-textarea') ))

commentr.click()
commentr.send_keys("HELO")
driver.find_element_by_id("submit-button").click()
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...