2017-10-28 39 views
-3

我寫了一個請求URL的腳本,如果響應是'CAPCHA_NOT_READY',那麼腳本應該睡5秒,然後再次請求URL。如果響應以'OK'開始,那麼該腳本應該繼續。Python:使用if和else語句來循環

我不知道我如何設置這個循環。謝謝,皮爾斯。

r = requests.get(url) 
print("Sending Captcha To 2captcha") 
print("Captcha ID = "+(r.text)) 

time.sleep(5) 

url2 = "http://2captcha.com/res.php?key="+api+"action=get&id="+(r.text)[3:] 
print(url2) 
r = requests.get(url2) 
print(r.text) 

if r.text == "CAPCHA_NOT_READY": 
    time.sleep(5) 
    r = requests.get(url2) 
    print(r.text) 
+1

嘗試將您的'if'改爲'while'嗎? – Nick

+1

而您的條件 –

+0

謝謝你們 - 完美工作 –

回答

0

到目前爲止,據我瞭解,你想從URL驗證碼併發送,直到成功每隔5秒到URL2和請求URL2。

r = requests.get(url) 
print("Sending Captcha To 2captcha") 
print("Captcha ID = "+(r.text)) 
CAPTCHA_ID = r.text 
time.sleep(5) 

CAPTCHA_TEXT = True 
while CAPTCHA_TEXT: 
    url2 = "http://2captcha.com/res.php?key="+api+"action=get&id="+(CAPTCHA_ID)[3:] 
    r = requests.get(url2) 
    if r.text == 'CAPCHA_NOT_READY': 
     time.sleep(5) 
    if r.text == 'OK': 
     CAPTCHA_TEXT = False 
+0

我認爲請求ID需要保持不變。你在每次迭代之後將一個新的請求分配給變量'r'。這可能會改變'r.text',這樣第二次迭代可能會失敗。據我瞭解問題,用戶需要檢查某個請求ID是否準備就緒。 –

+0

@Pablo哦,是的。我沒有注意到。我的錯。編輯。 –

0

這將是我的做法:

r = requests.get(url) 

url = ("http://2captcha.com/res.php?" 
     "key={api_key}&action=get&id={req_id}" 
     .format(
      api_key=api, 
      req_id=r.text[3:], 
     )) 

is_capcha_ready = False 

while not is_capcha_ready: 

    if requests.get(url).text == "CAPCHA_NOT_READY": 
     time.sleep(5) 
    else: 
     is_capcha_ready = True 

如果請求來自請求庫,你也可以通過查詢字符串作爲數據關鍵字參數。

http://docs.python-requests.org/en/master/user/quickstart/#passing-parameters-in-urls