【问题标题】:AttributeError: 'dict' object has no attribute 'send_keys' Selenium WebdriverAttributeError:“dict”对象没有属性“send_keys”Selenium Webdriver
【发布时间】:2022-01-27 13:45:02
【问题描述】:

我对编码和 python 比较陌生。我正在尝试自动登录到linkedin 以向我的连接发送消息。我在这个过程中使用 selenium webdriver。我还无法使用自动化流程登录,因为我得到了 错误:dict 对象没有属性 send_keys。

我知道在这段代码中“用户名”是一个字典类型,因为我检查过并且错误告诉我它没有属性“send_keys”,我得到错误消息的意思,该属性不存在,但我不知道如何解决。我还想问一下我创建的名为“用户名”的变量我可以称之为任何东西吗?我知道称它为用户名可能是最好的,但我问这个是为了我的理解。

以下代码是我到目前为止所做的,我知道它不完整,但我喜欢一次一行地工作和解决问题。

from selenium import webdriver
from selenium.webdriver.common.by import By
from selenium.webdriver.common.keys import Keys
from selenium.webdriver.chrome.service import Service
import time 

s = Service("/usr/local/bin/chromedriver")
driver = webdriver.Chrome(service=s)
driver.get("https://linkedin.com/login")

time.sleep(2)

username = driver.find_element(By.ID,"username")
username.send_keys("my email address goes here")

我还附上了一张图片,以便可以看到我正在使用 LinkedIn 页面的哪个部分和标签来尝试登录。

Linkedin inspect element code on signing page

我希望我没有遗漏任何内容,我试图尽可能地具有描述性。 提前致谢!

【问题讨论】:

  • 而不是driver.find_element 使用字段的名称,即会话键,如您的图片中所示,driver.find_element_by_name('session_key')
  • 我按照你的说法更改了行,但我仍然收到以下错误消息:AttributeError:'dict' object has no attribute 'send_key'。所以这是 username.send_keys 行,当我输入我的电子邮件地址时。

标签: python selenium selenium-webdriver


【解决方案1】:

这是一个错误!

webdriver.find_element() 方法应该返回一个对象 webdriver.remote.webelement.WebElement 而不是字典。

因此,这种行为很可能是 here 记录的错误,而不是您的编码错误。

您可能将旧版本的 chromium 与较新的 selenium 4.0 结合使用。

如何解决

选项 A - 软件更新。

确保您为您的网络浏览器网络驱动程序selenium安装了最新版本

选项 B - 代码补丁。

如果您无法更新(我的 RaspberryPi 遇到问题,这里我没有更新 Chromium 的选项,因为它不再受支持。):

您必须为您的网络驱动程序激活 w3c 选项。

import time 
from selenium import webdriver
from selenium.webdriver.common.by import By
from selenium.webdriver.common.keys import Keys
from selenium.webdriver.chrome.service import Service
from selenium.webdriver.chrome.options import Options       # [!]

s = Service("/usr/local/bin/chromedriver")
opts = Options()                                            # [!]
opts.add_experimental_option('w3c', True)                   # [!]
driver = webdriver.Chrome(service=s, options=opts)          # [!]
driver.get("https://linkedin.com/login")

time.sleep(2)

username = driver.find_element(By.ID,"username")
username.send_keys("my email address goes here")

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-09-29
    • 2012-06-28
    • 2022-06-27
    • 1970-01-01
    相关资源
    最近更新 更多