我如何迭代列表中的各行并使用它们在表单中输入?python
我有以下代码:我如何迭代列表中的各行并使用它们在表单中输入?python,python,selenium,Python,Selenium,我有以下代码: 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_ele
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.
目前,我只能从值列表中选择一行。我希望能够创建一个for循环,允许我在程序运行后选择下一行值。我发现嵌套循环可能会有所帮助,但不确定如何使其工作
更新:
这是我努力实现的一部分。我尝试了一些作为反馈提供的代码,但循环工作不正常
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()
我让它这样工作
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)]
不完美,但对我来说很有用。非常感谢。
ls
是一个列表。我想下面是你需要的
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]))
下面是一个可以使用的循环示例:
for values in ls:
for i in range(len(values)):
print(values[i])
您将希望将这些元素作为元素[1]而不是元素1来处理:
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()
您可以使用循环
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]))
循环没有像我期望的那样工作。不,我很抱歉-这里不是调试我无法运行的代码的地方(我甚至不知道错误,如果有的话)。我看不出有什么不对劲;我确实看到了两个版本之间的差异(time.sleep(1),对click()的调用处于不同的位置,等等)