#python
#python
Вопрос:
Я получаю данные из ранее запрошенного URL. Пока все работает.
Моя проблема: я пытаюсь выполнять запрос каждые X секунд, и если запрос показывает другое значение, что-то должно быть сделано. Но он выводит решение-захват, даже когда finalresponseback != notready
responseback = requests.get('https://2captcha.com/res.php?json=1amp;action=getamp;key=' apikey "amp;id=" finalrequest)
responseback_json = responseback.json()
finalresponseback = responseback_json['request']
print(responseback_json)
notready = (str("CAPCHA_NOT_READY"))
while(finalresponseback == notready):
print("Solving-Capture...")
if finalresponseback != notready:
print("Entering...")
Комментарии:
1. Пожалуйста, запишите свой код вместо того, чтобы делиться картинкой.
2. Ты пробовал
time.sleep()
? Я думаю, таким образом вы можете делать разрыв между каждым запросом каждые X секунд.
Ответ №1:
Это из-за того, как вы написали свой код, допустим, что finalresponseback не готов, тогда это произойдет:
while(finalresponseback == notready): # This would enable the loop because it's equal to not ready
print("Solving-Capture...") # It would print this
if finalresponseback != notready: # Nothing would happen because it is equal to notready
print("Entering...") # This woudln't happen
Однако, если вдруг это изменится:
while(finalresponseback == notready): # This happened before it changed
print("Solving-Capture...") # This also happened before it changed, so it happens anyway
if finalresponseback != notready: # This happens too
print("Entering...") # And so does this, so therefore it would print both statements
Этот код плох, потому что, если он изменится на not be notready, тогда он выйдет из цикла без каких-либо действий, если он не изменится во время выполнения цикла, лучшей версией этого будет:
while(1): # Starts a loop
if finalresponseback != notready: # Checks finalresponseback
print("Entering...") # Prints statement
break # Exits loop
else: # If it is equal to notready
print("Solving-Capture...") # Print statement
Приведенный непосредственно выше код проверяет finalresponseback в цикле, и, следовательно, он сможет распечатать инструкцию, а не полностью завершать ее в начале, как раньше.
И, наконец, мы можем добавить:
responseback_json = responseback.json()
finalresponseback = responseback_json['request']
к коду для запроса каждые x секунд, как так:
import time # Add to top of code, imports the time library
x = 2 # Sets the x variable
while(1): # Starts a loop
responseback_json = responseback.json()
finalresponseback = responseback_json['request']
if finalresponseback != notready: # Checks finalresponseback
print("Entering...") # Prints statement
break # Exits loop
else: # If it is equal to notready
print("Solving-Capture...") # Print statement
time.sleep(x)
И, наконец, совет по оптимизации вашего кода, вместо
notready = (str("CAPCHA_NOT_READY"))
Вы можете сделать
notready = "CAPCHA_NOT_READY"
Это потому, что это уже строковое значение (как указано речевыми знаками «»)