2017-08-08 81 views
-1

我已经写了一个python中的脚本结合硒来从“街道号”和“地址”执行反向搜索的基础上从网站上找到一个名称。首先,脚本应该从“search_post”列表中选择“A1”,将其放入浏览器的“街道搜索框”中,然后从“search_address”中选择“B1” “列表将其放入浏览器的”地址搜索框“中。我的脚本适用于第一次搜索,但是当第一个循环用于第二个项目时,它会再次用A1代替A2,第二个循环在这种情况下选择正确的项目B2。更具体地说,第一次需要A1,B1,但第二次需要A1,B2来代替A2,B2。我怎样才能修复这个循环,以便它平行地选择物品。如何修复笨拙写入循环?

A1. 8227 B1. FINDLAY ST 
A2. 6330 B2. LAUTREC DR 

下面是脚本:

from selenium import webdriver 
from selenium.webdriver.common.by import By 
from selenium.webdriver.support.ui import WebDriverWait 
from selenium.webdriver.support import expected_conditions as EC 

search_post = ['8227','6330 '] 
search_address = ['FINDLAY ST','LAUTREC DR'] 

driver = webdriver.Chrome() 
driver.get("http://hcad.org/quick-search/") 
wait = WebDriverWait(driver, 10) 

for item in search_post: 
    for elem in search_address: 
     driver.switch_to_frame(driver.find_element_by_tag_name("iframe")) 
     driver.find_element_by_id("s_addr").click() 
     wait.until(EC.presence_of_element_located((By.NAME, 'stnum'))) 
     driver.find_element_by_name('stnum').send_keys(item) 
     driver.find_element_by_name('stname').send_keys(elem) 
     driver.find_element_by_xpath("//input[@value='Search']").click() 
     driver.switch_to.frame(driver.find_element_by_id("quickframe")) 
     element = driver.find_element_by_xpath("//td[@class='data']/table//th") 
     print(driver.execute_script("return arguments[0].childNodes[2].textContent", element).strip()) 

driver.quit() 
+3

拆分文本成段会很长的路要走,以使您的问题更容易理解。 –

+0

原谅我的语言障碍。 – SIM

回答

1

你需要的是蟒蛇zip方法。您的循环开始改变从

for item in search_post: 
    for elem in search_address: 

for item, elem in zip(search_post, search_address) 

什么zip通常做的就是创建元素的成对元组,并把随后在数组中。下面是一个示例执行

>>> zip([1,2],[3,4]) 
[(1, 3), (2, 4)] 

编辑9月:

由于@JeffC,提出了一个更简单的方法是只使用索引。有很多方法可以做到这一点,但为了简单起见,我也会列出索引。下面

for item in search_post: 
    for elem in search_address: 

更改为

i = 0 
while i < len(search_post): 
    item, elem = search_post[i], search_address[i] 
    i += 1 
    ....rest of your code... 
+0

谢谢Tarun Lalwani,为您解答。它修复了for循环问题。最后一件事情 - 如何在收集第一条信息后重新使用已打开的浏览器,而不是打开新的浏览器? – SIM

+0

如果这是您的完整代码,我不认为有任何理由打开新的浏览器。它是否打开一个新标签?因为你的驱动程序启动并且完全在循环之外。 –

+0

我有另一个问题排序。 – SIM