#python #discord
Вопрос:
Я написал скрипт на python, который открывает firefox, и по этому вопросу он переходит в раздор.
Когда я запускаю сценарий, он переходит на личный канал, который я создал, и должен реагировать на сообщение, которое я опубликовал. (Он также предназначен для реагирования на каждое сообщение, на которое уже есть реакция.)
Он делает именно то, что я хочу, за исключением одной проблемы. Он не перестает реагировать на сообщение, когда «отреагировал» на веб-сайте = True.
Причина, по которой у меня есть свой while loop
, заключается в том, что он всегда проверяет наличие новых сообщений с реакциями.
Я не знаю, как это исправить. Полный код приведен ниже.
(Я знаю, что это против разногласий и беру на себя полную ответственность.)
#! /usr/bin/python
from selenium import webdriver
from selenium.webdriver.common.keys import Keys
import time
Email = "YourEmail"
Password = "YourPassword"
# The Function that will Auto React
def Auto_React():
Click_Emote = driver.find_element_by_class_name('reactionInner-15NvIl').click()
# This is where the Auto React code will go
# Open browser
driver = webdriver.Firefox()
# Go to Discord
driver.get("YourDiscordChannelLink")
# Login to Discord
email_box = driver.find_element_by_name("email")
email_box.send_keys(Email)
password_box = driver.find_element_by_name("password")
password_box.send_keys(Password)
# Pressing enter on the password box will trigger the login
driver.find_element_by_name("password").send_keys(Keys.RETURN)
# The page needs to load fully before the script can move forward
time.sleep(15)
# Bypass school email popup
bypass_school_signup = driver.find_element_by_class_name('close-hZ94c6').click()
time.sleep(5)
while True:
Auto_React()
Комментарии:
1. Хотя код вообще не ищет «отреагировал» на веб-сайте? Это просто заканчивается бесконечным циклом, который ничего не проверяет.
2. @ChrisG Посмотрите на функцию Auto_React. Я сам это проверил. Это отлично работает
3. «это отлично работает»? Все, что он делает, — это нажимает на что-то. Опять же, если вы хотите, чтобы он перестал реагировать на сообщение, вам нужно каким-то образом прочитать информацию из сообщения, чтобы узнать, отреагировали ли вы на него уже. Как я уже сказал, я не вижу никакого кода, который даже пытается выяснить, существует ли слово «отреагировал». Как он должен останавливаться на основе условия, если он даже не пытается проверить это условие?
4. Опять же: вы говорите
It does not stop reacting to the message when "reacted" on the website = True.
так, как будто ожидаете, что он это сделает, но нигде вы не говорите ему об этом на самом деле5. Я также сказал выше, что не знаю, как проверить, была ли реакция на сообщение или нет. Функция ищет элемент, который имеет
class_name "reactionInner-15NvIl"
. Этот элемент является кнопкой реакции, и на него нажимают.
Ответ №1:
Похоже, у вас бесконечный цикл (если я чего-то не упускаю?), вы продолжаете работать Auto_React
, в котором нет оператора break, я не думаю, что вам нужен цикл while здесь, но в случае, если вы все же добавите в него оператор break, чтобы ваш код не повторялся бесконечно!
РЕДАКТИРОВАТЬ: Я не уверен точно , как это будет реализовано в коде, но вместо этого вы могли бы сделать что-то вроде for all messages that are already reacted to
: сначала получить все сообщения с реакцией, а затем повторить их и снова реагировать, таким образом, ваш код завершится, когда вы закончите.
Комментарии:
1. Посмотрите на функцию Auto_React. Я сам это проверил. Это отлично работает. В нем нет оператора break, потому что я хочу, чтобы он реагировал на каждое сообщение, на которое уже отреагировали. Спасибо за ответ, тхо.
2. Теоретически это кажется хорошим, но решения все еще нет. Я дам вам право голоса, хотя.
3. Это не ответ