2011-01-06 58 views
0

我有兩個列表,用戶ID中的一個和密碼中的一個。我alread有登錄到一個網站,刮出我需要的數據的腳本...2列出,環路和一個登錄

#!/usr/bin/env python 
from mechanize import Browser 
from BeautifulSoup import BeautifulSoup 
import easygui 

br = Browser() 
hid = easygui.enterbox (msg="Enter Hotel ID", title="HID", default="", strip=True) 
pwd = easygui.enterbox (msg="Enter Password", title="HID", default="", strip=True) 
url = "http://example.com" 
page = br.open(url) 
#Select form on front page, input values and submit 
br.select_form(nr=0) 
br["UN"] = hid 
br["txtID"] = pwd 
results = br.submit().read() 

#Printing XML results to a file by appending 
myfile = open('C:\\Python\\xml\\output.xml','a') 
myfile.write(results) 
myfile.close() 

#Printing txt results to a file by appending 
myfile = open('C:\\Python\\xml\\output.txt','a') 
myfile.write(results) 
myfile.close() 

因此我需要輸入登錄/密碼信息時easygui給我的提示這樣做。如果我所有的密碼儲存在兩個列表...

userlist = ['254376xml', '254371xml', '245157xml', '244829xml', '242404xml', '238153xml', '235884xml', '28551xml'] 
pwordlist = ['mbhg934uh', 'hj2r93kh8s', 'mhg90wihf', 'ng0218hkd', 'nb029hkegh', 'bng0219hk', 'mg029k03g', 'mntg0ohwf'] 

我使用整數循環來在時間循環的每個迭代進口值的一個嘗試,我已經沒有成功嘗試。我已經找到了一些關於如何做到這一點的幫助和教程,但看起來並不符合我的具體需求。任何人都可以指出我正確的方向或建議我可以使用什麼代碼來實現此功能。

謝謝。

回答

1

我不知道我完全理解你的要求。你是否想並行迭代這兩個列表,在每次迭代中提取相應的用戶名/密碼對?

如果是這樣,那麼

userlist = ['254376xml', '254371xml', '245157xml', '244829xml', '242404xml', '238153xml', '235884xml', '28551xml'] 
pwordlist = ['mbhg934uh', 'hj2r93kh8s', 'mhg90wihf', 'ng0218hkd', 'nb029hkegh', 'bng0219hk', 'mg029k03g', 'mntg0ohwf'] 
for username, password in zip(userlist, pwordlist): 
    print "Username:", username, " - Password:", password 
print "Done!" 

應該做的。

但如果你問,如果有這個更好的數據結構,那麼我建議marcog的字典解決方案。

+0

這(從其他答案取碼)這就是我想要和使用例如,我可以讓它拿起第一個用戶/ pword。但它只會輸出第一對而不是全部對。我確定我只是缺少一條線來再次運行循環。 – Mike 2011-01-06 16:35:45

+0

這很奇怪;它應該循環所有這些。我會用完整的示例編輯我的帖子。 – 2011-01-06 20:28:47

2

如果要檢查用戶輸入密碼正確,你會過得更好它們存儲在像下面的字典。您需要填寫我已放置的其他字典...

passwords = { '254376xml': 'mbhg934uh', '254371xml': 'hj2r93kh8s', ... } 
def check_password(username, password): 
    if username not in passwords: 
    return False # username not found 
    return password == passwords[username] # check the password is correct 

然後調用它像這樣:

>>> check_password('254371xml', 'hj2r93kh8s') # correct password 
True 
>>> check_password('254371xml', 'wrong') # wrong password 
False 
>>> check_password('non-existant', 'wrong') # non-existant user 
False 
+0

感謝您的幫助,我試圖循環程序,以便每次從每個列表中選取下一項。使用這些項目登錄並從網站上刮取數據,然後再次使用接下來的兩位信息通過循環。 – Mike 2011-01-06 16:24:11

0

我認爲你試圖acghieve是

#!/usr/bin/env python 
from mechanize import Browser 
from BeautifulSoup import BeautifulSoup 
import easygui 

br = Browser() 
userlist = ['254376xml', '254371xml', '245157xml', '244829xml', '242404xml', '238153xml', '235884xml', '28551xml'] 
pwordlist = ['mbhg934uh', 'hj2r93kh8s', 'mhg90wihf', 'ng0218hkd', 'nb029hkegh', 'bng0219hk', 'mg029k03g', 'mntg0ohwf'] 

for username, password in zip(userlist, pwordlist): 

    url = "http://example.com" 
    page = br.open(url) 
    #Select form on front page, input values and submit 
    br.select_form(nr=0) 
    br["UN"] = username 
    br["txtID"] = password 
    results = br.submit().read() 

    #Printing XML results to a file by appending 
    myfile = open('C:\\Python\\xml\\output.xml','a') 
    myfile.write(results) 
    myfile.close() 

    #Printing txt results to a file by appending 
    myfile = open('C:\\Python\\xml\\output.txt','a') 
    myfile.write(results) 
    myfile.close()