2017-08-08 86 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