Как исправить 'объект типа' float 'не имеет len ()' при автоматизации заполнения веб-формы в Python с помощью Selenium - PullRequest
0 голосов
/ 03 мая 2019

Я пытаюсь автоматизировать действие по заполнению формы, и Selenium уже импортирован и запущен. Я могу выполнить код на первой итерации, но для второй итерации появляется следующее сообщение об ошибке:

Traceback (most recent call last):
  File "<pyshell#63>", line 4, in <module>
    ans_box.send_keys(ans)
  File "/Library/Frameworks/Python.framework/Versions/3.7/lib/python3.7/site-packages/selenium/webdriver/remote/webelement.py", line 478, in send_keys
    {'text': "".join(keys_to_typing(value)),
  File "/Library/Frameworks/Python.framework/Versions/3.7/lib/python3.7/site-packages/selenium/webdriver/common/utils.py", line 150, in keys_to_typing
    for i in range(len(val)):
TypeError: object of type 'float' has no len()
i = 0
while i<1:
    ans_box = browser.find_element_by_name('AnSwEr0001')
    ans_box.send_keys(i)
    i=i+0.0001
    submit_box = browser.find_element_by_name('submitAnswers')
    submit_box.click()

Буду очень признателен за помощь в этом. Спасибо!

Ответы [ 2 ]

1 голос
/ 03 мая 2019

В документах Selenium: https://seleniumhq.github.io/selenium/docs/api/py/webdriver_remote/selenium.webdriver.remote.webelement.html

 send_keys(*value)[source]
    Simulates typing into the element.
    Args :  
        value - A string for typing, or setting form fields. For setting file inputs, this could be a local file path.

Вам нужно дать строку send_keys ()

ans_box.send_keys(str(i))
0 голосов
/ 03 мая 2019

Это сообщение об ошибке ...

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

... означает, что вы передали значение float в методе send_keys().


Анализ * * +1010 В первой итерации значение из i равно 0 an типа int. Но на следующей итерации значение из i равно 0.0001 и имеет тип float. Это можно продемонстрировать на следующем примере: Пример кода: browser.get("https://www.google.com/") i = 0 print(type(i)) while i<1: ans_box = browser.find_element_by_name('q') ans_box.clear() ans_box.send_keys(i) i=i+0.0001 print(type(i)) Выход на консоль: <class 'int'> <class 'float'> Traceback (most recent call last): File "C:\Users\AtechM_03\LearnAutmation\PythonProject\Stackoverflow\test.py", line 14, in <module> ans_box.send_keys(i) File "C:\Python\lib\site-packages\selenium\webdriver\remote\webelement.py", line 478, in send_keys {'text': "".join(keys_to_typing(value)), File "C:\Python\lib\site-packages\selenium\webdriver\common\utils.py", line 150, in keys_to_typing for i in range(len(val)): TypeError: object of type 'float' has no len() Но send_keys (* значение) принимает string в качестве аргумента. Решение

Вам необходимо преобразовать тип данных float в string, чтобы иметь возможность проходить через send_keys() следующим образом:

i = 0
while i<1:
    ans_box = browser.find_element_by_name('AnSwEr0001')
    ans_box.send_keys(repr(i))
    i=i+0.0001
    submit_box = browser.find_element_by_name('submitAnswers')
    submit_box.click()
...