Не прерывайте цикл, не зная, что делать

#python

Вопрос:

Чтобы практиковать python, я занимаюсь случайными проектами и попытался создать спам-бота, который спамит форму Google. Я написал большую часть этого, но я не могу понять, как зациклить код с определенного места.

 import pyautogui
import random
import webbrowser
import time
from itertools import count, repeat

list = ["Test", "test", "tesT"]

countA = input("A:")


webbrowser.open('https://docs.google.com/forms/d/1YPhaNvFkncyGuCxIcJ7UhjQDeR55WX20H8cdmPxlSGU/viewform?edit_requested=true', new = 2)


while (countA<countA):
    pyautogui.moveTo(700, 360)
    time.sleep(2)
    pyautogui.click()
    item = random.choice(list)
    pyautogui.write(item)
    time.sleep(1)
    pyautogui.moveTo(700, 430)
    time.sleep(1)
    pyautogui.click()
    time.sleep(2)
    pyautogui.moveTo(700, 255)
    pyautogui.click()
    countA = countA   1
else:
    break
 

Часть, которую я хочу зациклить:

     pyautogui.moveTo(700, 360)
    time.sleep(2)
    pyautogui.click()
    item = random.choice(list)
    pyautogui.write(item)
    time.sleep(1)
    pyautogui.moveTo(700, 430)
    time.sleep(1)
    pyautogui.click()
    time.sleep(2)
    pyautogui.moveTo(700, 255)
    pyautogui.click()
    countA = countA   1
 

Я попробовал цикл while с использованием break, но по-разному потерпел неудачу (в основном это говорит мне, что break не находится в цикле). Я думаю, что мне удалось правильно выполнить остальные части (поправьте меня, если я ошибаюсь).
TLDR: Я пытаюсь заставить его запросить ввод данных пользователя о том, сколько раз он должен зацикливаться, а затем зацикливать указанную сумму.

Извините, если что-то неясно.

Комментарии:

1. в то время как (графа Ты же понимаешь, что это никогда не бывает правдой, верно?

2. Google-компания, стоящая за Recaptcha, и является лидером отрасли в области технологий защиты от ботов. Если вы собираетесь резать зубы на спам-ботов, форма Google-не то место, чтобы это делать. Они обнаружат, что вы делаете, и отключат его, даже не привлекая к этому процессу человека.

3. Я вообще не понимаю, зачем вам это else заявление. while Цикл автоматически остановится, когда его условие больше не будет выполнено. Однако в этом случае условие никогда не может быть выполнено, потому countA что всегда будет равно countA : это одна и та же переменная. Число не может быть меньше самого себя.

4. Поищите в python цикл for и парадигму для x в диапазоне(y). В нынешнем виде этот код не имеет особого смысла. Ваш перерыв действительно не в цикле, но если бы ваше условие действительно сработало, вам не нужно было бы указывать, когда прерываться, когда условие не выполнено: оно сделает это само. Остальное с циклом не делает того, что вы думаете (и лучше оставить на некоторое время: это удобно, но не обычная конструкция)

5. Также не режьте зубы на спам-ботов. Напишите что-нибудь полезное :p

Ответ №1:

Я вижу две проблемы:

  1. input функция python возвращает строку, а не какое-либо число. Это означает, что в строке countA = input("A:") устанавливается countA значение '3' (строка), если пользователь вводит 3 . Вам нужно преобразовать это в целое число.
    Если мы предположим, что вас не волнует проверка ввода, это может выглядеть так:
 countA = int(input("A:"))
 
  1. Похоже, вы пытаетесь использовать одну и ту же переменную countA для хранения того, сколько итераций хотел бы пользователь, и сколько их произошло. Это приводит к бессмысленному while (countA<countA): , что всегда терпит неудачу.
    По сути, у вас есть три варианта решения проблемы:

    • запустите счетчик взаимодействия с 0 и увеличивайте его до тех пор, пока он не достигнет указанного пользователем числа
    • уменьшите переменную, удерживающую ввод пользователя, до тех пор, пока она не достигнет 0
    • замените цикл while на for _ in range(countA):

Кроме того, ошибка верна; вы break не находитесь в цикле. Вы break находитесь в else блоке, который будет активирован, если цикл while завершится из-за его состояния. Смотрите это объяснение