проблема с циклом for в Python получает только последний элемент - PullRequest
0 голосов
/ 06 ноября 2019

Я новичок в python, в настоящее время я пытаюсь автоматизировать заполнение поля веб-сайта с помощью selenium.

Я пытаюсь перебирать вложенные списки с помощью цикла for, но всегда получаю толькопоследний элемент. Любые предложения, почему?

fields = [['a','b','c'],['x','y','z']]
for i in range(len(fields)):
    driver.find_element_by_xpath("element").send_keys(fields[i][0],fields[i[1],fields[i][2])
    driver.find_element_by_xpath("element_save").click()

#then loop and iterate through 2nd nested list

# OUTPUT = x,y,z

Я ожидаю итерации, начиная с индекса 0 до конца списка.

Ответы [ 2 ]

1 голос
/ 06 ноября 2019

Вам не нужно range(len(list_)) только для итерации по индексу.

Обычный for подойдет. Вы также можете распаковать список с помощью *:

fields = [['a','b','c'],['x','y','z']]
len_ = len(fields)
for i in range(len_):
    driver.find_element_by_xpath("element").send_keys(*fields[i])

Вы также можете выполнить итерацию по значениям самого fields:

fields = [['a','b','c'],['x','y','z']]

for field in fields:
    driver.find_element_by_xpath("element").send_keys(*field)
0 голосов
/ 06 ноября 2019

Во-первых, в вашей программе есть ошибка, как вы ее написали:

fields = [['a','b','c'],['x','y','z']]
for i, v in enumerate(fields):
    driver.find_element_by_xpath("element").send_keys(fields[i][0],fields[i[1],fields[i][2])
                                                                           ^ # No closing ]

Во-вторых, есть термин, который разработчики Python любят использовать: Pythonic Code .

Нам нравится писать краткий лаконичный код, который способствует удобочитаемости, а не сжатию каждого последнего дюйма производительности.

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

fields = [['a','b','c'],['x','y','z']]
for field in fields:
    name, age, height = field  # Replace this line with whatever the fields represent
    driver.find_element_by_xpath("element").send_keys(name, age, height)

Этот код является коротким, кратким и, прежде всего, чрезвычайно читаемым для кого-то другого.

Примечание: замените name, age, height на то, что они представляют в вашей программе.

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

fields = [['a','b','c'],['x','y','z']]
for field in fields:
    name, age, height = field  # Replace this line with whatever the fields represent
    print(name, age, height)
    driver.find_element_by_xpath("element").send_keys(name, age, height)

Надеюсь, это поможет.

...