我无法使用 Selenium WebDriver 和 Python 发送密钥

问题描述 投票:0回答:6

我正在尝试执行一个简单的测试:

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'

有什么问题吗?

python selenium-webdriver webdriver
6个回答
4
投票

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

1
投票

您是否尝试更改参考元素? 如果您使用不同的引用调用 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()

1
投票

您的代码的问题是您没有告诉司机将钥匙发送到哪里

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

0
投票

您必须更改参考元素

driver.get('http://google.com')
elem.find_element_by_name('q')
elem.send_keys('hey')

0
投票

我遇到了同样的问题,但我找到了解决方案。

move_to_element
中使用
ActionChains

  1. 查找元素。

    elem = driver.find_element_by_*

  2. 创建您的动作链驱动程序

    actions = ActionChains(driver)

  3. 使用移动到命令,因此webdriverpoint到该元素的位置,但在发送密钥之前,您需要使用click()函数在该元素上set

    webdriver
    位置。现在,webdriver有一个表面积来放置给定的键(数据),为此您将使用
    send_keys()
    功能。最后只需将
    perform()
    函数放入 execute 这些所有任务都非常顺利。
    actions.move_to_element(<ELEMENT>).click().send_keys(<DATA>).perform()

    https://selenium-python.readthedocs.io/api.htmlt

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

-1
投票

这是导致问题的 selenium 版本。我遇到了同样的问题。

是selenium 3.3.3版本有兼容性问题。

尝试:

pip uninstall selenium
pip install selenium==3.3.1
© www.soinside.com 2019 - 2024. All rights reserved.