AttributeError问题:'WebDriver'对象没有属性'manage'

时间:2019-04-21 00:43:53

标签: javascript python selenium selenium-webdriver

我的代码:

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")

我的错误:

  

回溯(最近通话最近):文件   “ 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()

这是错误

  

回溯(最近通话最近):   文件“ C:\ Users \ Desktop \ python \ Game.py”,第74行,在   commentr.click()。send_keys(“ HELO”)   AttributeError:“ NoneType”对象没有属性“ send_keys”

1 个答案:

答案 0 :(得分:2)

这是一个原始问题的答案:

要解决当前的问题,请使用

driver.implicitly_wait(10)

手册是there

但是,您可能完全朝错误的方向前进。 而是尝试使用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"))
)

问题的更新部分的更新:

  

我正在尝试将密钥发送到youtube上的评论框。我删除了一些代码,目前正在运行此代码。

我怀疑您在那里根本不需要implicitly_wait函数。

  • 我已经查看了YouTube页面。第一步是正确的-找到“添加公共评论...”框,然后单击它。

  • 我跳过了implyly_wait调用-在那里没有任何影响。

  • 在下一步中,您尝试将击键发送到找到并单击的同一框中。错了尽管它们看起来完全一样,但是您单击的是ID为simplebox-placeholder的元素,但是一旦单击该元素便变得不可见,并且ID为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()