简体   繁体   English

如何遍历列表中的各个行并用于输入表单? 蟒蛇

[英]How can I iterate through individual rows in a list and use to input in form? Python

I have the following code: 我有以下代码:

from selenium import webdriver

#My list of [5,n] dimensional values 
ls = [ [3,10,19,20,25], [4,5,6,10,12]... [n] ]


#This is a website form that takes 5 values as input
element = driver.find_element_by_name("n1")
element1 = driver.find_element_by_name("n2")
element2 = driver.find_element_by_name("n3")
element3 = driver.find_element_by_name("n4")
element4 = driver.find_element_by_name("n5")

#After I find and store elements, I want to send 5 values from the list         
element.send_keys(str(ls[0]))
element1.send_keys(str(ls[1]))
element2.send_keys(str(ls[2]))
element3.send_keys(str(ls[3]))
element4.send_keys(str(ls[4]))

#Next I will submit form. Then loop again to retrieve next row of values 
#into form.

Currently I can only select one row from the list of values. 目前,我只能从值列表中选择一行。 I want to be able to create a for loop that allows me to select the next row of values after the program runs. 我希望能够创建一个for循环,使我可以在程序运行后选择下一行值。 I've found that maybe a nested loop may help, but not sure how to make it work. 我发现嵌套循环可能会有所帮助,但不确定如何使其工作。

UPDATE: 更新:

This is part of what I am trying to accomplish. 这是我要完成的工作的一部分。 I tried some of the code provided as feedback, but the loop is not working properly. 我尝试了提供的一些代码作为反馈,但是循环无法正常工作。

from selenium import webdriver


ls = [[1,5,10,16,19], [3,10,19,20,25], [1,2,11,16,29]]
for iter in range(3):
   driver = webdriver.Chrome('chromedriver.exe')

   driver.get("http://lottery.com/site/winningNumberSearch?")

   select = Select(driver.find_element_by_name('searchTypeIn'))
   select.select_by_visible_text("Number")
   select = Select(driver.find_element_by_name('gameNameIn'))
   select.select_by_visible_text("Fantasy 5")

   elements = [driver.find_element_by_name("n" + str(i) + "In") for i in 
   range(1,6)]

   for values in ls:
       if len(elements) != len(values):
           #if theres an error, do something
            pass
       for element, value in zip(elements, values):
           element.send_keys(str(value))
           driver.find_element_by_id("submit").click()
   driver.quit()

I got it to work like this 我让它像这样工作

driver = webdriver.Chrome()

driver.get("http://lottery.com/site/winningNumberSearch?")

select = Select(driver.find_element_by_name("searchTypeIn"))
select.select_by_visible_text("Number")
select = Select(driver.find_element_by_name('gameNameIn'))
select.select_by_visible_text("Fantasy 5")

elements = [driver.find_element_by_name("n" + str(i) + "In") for i in 
range(1, 6)]



for k in ls:
    if len(elements) != len(k):
        pass
    for j, l in zip(elements, k):
        j.send_keys(str(l))
        #sleep(1)

    sleep(1)    
    driver.find_element_by_id("submit").click()
    sleep(1)
    driver.get("http://flalottery.com/site/winningNumberSearch?")
    sleep(1)
    select = Select(driver.find_element_by_name("searchTypeIn"))
    select.select_by_visible_text("Number")
    select = Select(driver.find_element_by_name('gameNameIn'))
    select.select_by_visible_text("Fantasy 5")
    elements = [driver.find_element_by_name("n" + str(i) + "In") for i in 
    range(1, 6)]

Not perfect, but its working for me. 不完美,但对我有用。 Thanks much. 非常感谢。

ls is a list of list. ls是列表的列表。 I guess following is what you need 我想以下是您所需要的

element.send_keys(str(ls[0][0]))
element1.send_keys(str(ls[0][1]))
element2.send_keys(str(ls[0][2]))
element3.send_keys(str(ls[0][3]))
element4.send_keys(str(ls[0][4]))

Here's an example of a loop you can use : 这是您可以使用的循环示例:

for values in ls:
   for i in range(len(values)):
       print(values[i])

You'll want to address the elements as element[1], not element1: 您需要将元素寻址为element [1],而不是element1:

elements = [driver.find_element_by_name("n" + str(i)) for i in range(1, 6)]

for values in ls:
    if len(elements) != len(values):
        # if you consider this an error, do something
        pass
    for element, value in zip(elements, values):
        element.send_keys(str(value))

    submit_form()

You can use loop 您可以使用循环

for values in ls:
    for i in range(1, len(values) + 1):
        element = driver.find_element_by_name("n{}".format(i))
        element.send_keys(str(values[i-1]))

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM