#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:
Я вижу две проблемы:
input
функция python возвращает строку, а не какое-либо число. Это означает, что в строкеcountA = input("A:")
устанавливаетсяcountA
значение'3'
(строка), если пользователь вводит3
. Вам нужно преобразовать это в целое число.
Если мы предположим, что вас не волнует проверка ввода, это может выглядеть так:
countA = int(input("A:"))
- Похоже, вы пытаетесь использовать одну и ту же переменную
countA
для хранения того, сколько итераций хотел бы пользователь, и сколько их произошло. Это приводит к бессмысленномуwhile (countA<countA):
, что всегда терпит неудачу.
По сути, у вас есть три варианта решения проблемы:- запустите счетчик взаимодействия с 0 и увеличивайте его до тех пор, пока он не достигнет указанного пользователем числа
- уменьшите переменную, удерживающую ввод пользователя, до тех пор, пока она не достигнет 0
- замените цикл while на
for _ in range(countA):
Кроме того, ошибка верна; вы break
не находитесь в цикле. Вы break
находитесь в else
блоке, который будет активирован, если цикл while завершится из-за его состояния. Смотрите это объяснение