我正在尝试执行一个简单的测试:
from selenium import webdriver
from selenium.webdriver.common.keys import Keys
driver = webdriver.Firefox()
driver.get('http://google.com')
driver.find_element_by_name('q')
driver.send_keys('hey')
我收到错误:
Traceback (most recent call last):
File "C:/webdriver/test.py", line 8, in <module>
driver.send_keys('hey')
AttributeError: 'WebDriver' object has no attribute 'send_keys'
有什么问题吗?
WebDriver
实例没有send_keys()
方法。这就是错误的真正含义:
“WebDriver”对象没有属性“send_keys”
在
send_keys()
实例上调用
WebElement
,该实例由 find_element_by_*()
方法返回 - find_element_by_name()
在您的情况下:
element = driver.find_element_by_name('q')
element.send_keys("hey")
ActionChains
类,它对于构建操作链或应用更复杂的操作(例如拖放或鼠标移动)很有用。在这种情况下这是一个开销,但只是为了举例:
from selenium.webdriver.common.action_chains import ActionChains
actions = ActionChains(driver)
actions.move_to_element(element).send_keys("hey").perform()
您是否尝试更改参考元素? 如果您使用不同的引用调用 webdriver,这将是一个很好的做法。 更改参考后的代码。
from selenium import webdriver
from selenium.webdriver.common.keys import Keys
import time
driver = webdriver.Firefox()
driver.get('http://google.com')
#Firefox Webdriver is created and navigated to google.
elem = driver.find_element_by_name('q')
elem.send_keys('hey',Keys.RETURN)
#Keys.RETURN = Pressing Enter key on keyboard
time.sleep(5)
driver.close()
您的代码的问题是您没有告诉司机将钥匙发送到哪里
from selenium import webdriver
from selenium.webdriver.common.keys import Keys
driver = webdriver.Firefox()
driver.get('http://google.com')
driver.find_element_by_name('q')
driver.send_keys('hey') // driver dont know where to send the keys
正确的代码是:
from selenium import webdriver
from selenium.webdriver.common.keys import Keys
driver = webdriver.Firefox()
driver.get('http://google.com')
goog = driver.find_element_by_name('q') // you have stored element in goog variable
goog.send_keys('hey') // you told variable to send hey
或
找到元素后可以直接发送:
from selenium import webdriver
from selenium.webdriver.common.keys import Keys
driver = webdriver.Firefox()
driver.get('http://google.com')
driver.find_element_by_name('q').send_keys('hey')
您必须更改参考元素
driver.get('http://google.com')
elem.find_element_by_name('q')
elem.send_keys('hey')
我遇到了同样的问题,但我找到了解决方案。
在
move_to_element
中使用 ActionChains
。
查找元素。
elem = driver.find_element_by_*
创建您的动作链驱动程序
actions = ActionChains(driver)
使用移动到命令,因此webdriver将point到该元素的位置,但在发送密钥之前,您需要使用click()
函数在该元素上set
webdriver位置。现在,webdriver有一个表面积来放置给定的键(数据),为此您将使用
send_keys()
功能。最后只需将 perform()
函数放入 execute 这些所有任务都非常顺利。
actions.move_to_element(<ELEMENT>).click().send_keys(<DATA>).perform()
from selenium import webdriver
from selenium.webdriver.common.keys import Keys
driver = webdriver.Firefox()
driver.get('http://google.com')
elem = driver.find_element_by_name('q')
actions = ActionChains(driver)
actions.move_to_element(elem).click().send_keys('hey').perform()
这是导致问题的 selenium 版本。我遇到了同样的问题。
是selenium 3.3.3版本有兼容性问题。
尝试:
pip uninstall selenium
pip install selenium==3.3.1