TypeError:“FirefoxWebElement”类型的对象在使用 Selenium Python 通过 send_keys 发送文本时没有 len() 错误

Posted

技术标签:

【中文标题】TypeError:“FirefoxWebElement”类型的对象在使用 Selenium Python 通过 send_keys 发送文本时没有 len() 错误【英文标题】:TypeError: object of type 'FirefoxWebElement' has no len() error while sending text through send_keys using Selenium Python 【发布时间】:2022-01-03 16:26:23 【问题描述】:

代码试验:

lists = driver.find_elements_by_xpath("//*[@class= 'gradeA']/td[1]")
for list_item in lists:
    print(list_item.text)
    driver.find_element_by_xpath("//input[@id='event_name']").send_keys(list_item)

这是错误:

Traceback (most recent call last):
      File "C:/Users/Eventbuizz-t460-ki/PycharmProjects/pythonProject/pythonSelenium/super admin.py", line 31, in <module>
        y.send_keys(list_item)
      File "C:\Users\Eventbuizz-t460-ki\AppData\Local\Programs\Python\Python36\lib\site-packages\selenium\webdriver\remote\webelement.py", line 348, in send_keys
        'text': "".join(keys_to_typing(value)),
      File "C:\Users\Eventbuizz-t460-ki\AppData\Local\Programs\Python\Python36\lib\site-packages\selenium\webdriver\common\utils.py", line 150, in keys_to_typing
        for i in range(len(val)):
    TypeError: object of type 'FirefoxWebElement' has no len()
    
    Process finished with exit code 1

【问题讨论】:

在您的示例中,您已经打印了 list_item.text,但在 send_keys 中您只是发送了 list_item,这似乎是一个网络元素。如果你想发送一个字符串试试.send_keys(list_item.text) 当我使用 driver.find_element_by_xpath("//input[@id='event_name']").send_keys(list_item.text) 时,它显示错误文件 "C:\Users\Eventbuizz-t460-ki\AppData\Local\Programs\Python\Python36\lib\site-packages\selenium\webdriver\ remote\webelement.py”,第 73 行,文本文件“C:\Users\Eventbuizz-t460-selenium.common.exceptions.StaleElementReferenceException: Message: The element reference of stale: 要么该元素不再附加到DOM 或页面已刷新进程完成,退出代码为 1 这里似乎显示了您的错误The element reference of &lt;td&gt; stale: either the element is no longer attached to the DOM or the page has been refreshed。当您输入详细信息时,此页面是否刷新,您是否在循环中提交表单?您在浏览器中看到了什么? 没有页面不刷新。 lists = driver.find_elements_by_xpath("//*[@class= 'gradeA']/td[1]") for list_item in lists: print(list_item.text) driver.find_element_by_xpath("//span[normalize-space()='Events']").click() time.sleep(2) driver.find_element_by_xpath("//span[normalize-space()='Organizer Events']").click() time.sleep(8) driver.find_element_by_xpath("//input[@id='event_name']").send_keys(list_item.text) 这是我的完整代码,请检查 【参考方案1】:

当您使用 GeckoDriver 和 firefox find_elements_by_xpath() 会返回 FirefoxWebElements 的列表。

你可以遍历列表:

for list_item in lists:

并在循环中打印文本

print(list_item.text)

但是您不能在任何元素中通过 send_keys() 发送任何单独的 FirefoxWebElement

因此你会看到:

TypeError: object of type 'FirefoxWebElement' has no len()

解决方案

您需要发送元素 text,而不是通过 send_keys() 发送 FirefoxWebElement

driver.find_element_by_xpath("//input[@id='event_name']").send_keys(list_item.text)

【讨论】:

当我使用 driver.find_element_by_xpath("//input[@id='event_name']").send_keys(list_item.text) 它显示错误文件“C:\Users\Eventbuizz-t460- ki\AppData\Local\Programs\Python\Python36\lib\site-packages\selenium\webdriver\remote\webelement.py”,第 73 行,文本文件“C:\Users\Eventbuizz-t460-selenium.common.exceptions .StaleElementReferenceException:消息: 的元素引用 陈旧:元素不再附加到 DOM 或页面已刷新 进程以退出代码 1 结束 StaleElementReferenceException 听起来是一个不同的问题,需要以不同的方式解决。随时根据您的新要求提出新问题。 当我使用你的解决方案时,它会显示这个错误 driver.find_element_by_xpath("//input[@id='event_name']").send_keys(list_item.text) File "C:\Users\ Eventbuizz-t460-ki\AppData\Local\Programs\Python\Python36\lib\site-packages\selenium\webdriver\remote\webelement.py",第 73 行,在文本中返回 self._execute(Command.GET_ELEMENT_TEXT)['value '] raise exception_class(message, screen, stacktrace) selenium.common.exceptions.WebDriverException: Message: Element reference not seen before: db672820-5c96-4ac8-bc09-bffb3439dfaa 现在您看到了一个 WebDriverException,它与之前的错误 'FirefoxWebElement' has no len() 无关。我强烈认为这个问题的具体错误已经得到解决。随时根据您的新要求提出新问题。 很高兴能为您提供帮助。请accept answer 点击我的 answer 旁边的空心刻度线,它就在 votedown 箭头下方,这样刻度线就会转动绿色.

以上是关于TypeError:“FirefoxWebElement”类型的对象在使用 Selenium Python 通过 send_keys 发送文本时没有 len() 错误的主要内容,如果未能解决你的问题,请参考以下文章

反应本机获取多标记[未处理的承诺拒绝:TypeError:TypeError:未定义不是对象(评估'this.state.markers.map

Django TypeError - TypeError: issubclass() arg 1 必须是一个类

pyspark:TypeError:'float'对象不可迭代

Python 3.8 TypeError: can't concat str to bytes - TypeError: a bytes-like object is required, not 's

TypeError: key 必须是一个字符串,一个缓冲区或一个对象在 typeError 与 GCP 文件存在

TypeError: jQueryxxxxxx 不是函数