Несоответствие селена в чате Discord

#python #selenium #selenium-webdriver #discord

#python #selenium #selenium-webdriver #Discord

Вопрос:

Я автоматизирую отправку сообщения на заранее определенный канал discord на заранее определенном сервере с помощью selenium.

Я успешно перехожу на сервер, но при поиске текстового канала возникает несоответствие. Когда я пытался найти определенный канал на своем сервере, он находит его без каких-либо проблем, но когда я делаю это на другом сервере, он не может его найти.

Я использую следующую команду для поиска каналов:

 channel_element = driver.find_element_by_xpath("//div[@id='channels-5']")
  

Я получаю информацию id с веб-сайта discord при использовании Inspect в Chrome.

 setup=[{"server":"RL Insider","channel":"channels-23"}, {"server": "Carrot automation server", "channel": "channels-5"}]

import selenium
from selenium.webdriver.common.keys import Keys
from selenium import webdriver
from webdriver_manager.chrome import ChromeDriverManager


driver = webdriver.Chrome(ChromeDriverManager().install())
driver.get("https://discord.com/channels/@me")

# login

print(driver.title)
input("input anything when logged in")

def go_to_channel(server, channel_id,message):
    server_element = driver.find_element_by_xpath("//a[@aria-label='" server "']")
    driver.execute_script("arguments[0].click();", server_element)
    input("prompt")
    print(driver.current_url)
    try:
        channel_element = driver.find_element_by_xpath("//div[@id='" channel_id "']") #this does not work when used on the RL Insider server
        driver.execute_script("arguments[0].click();", channel_element)
        input("prompt")
        text_element = driver.find_element_by_xpath('//*[@id="app-mount"]/div[2]/div/div[2]/div/div/div/div/div[2]/div/main/form/div/div/div/div/div[3]/div[2]')
        text_element.click()
        text_element.clear()
        for c in message[::-1]:
            text_element.send_keys(c)
        text_element.send_keys(Keys.RETURN)
        input("prompt")
    except selenium.common.exceptions.NoSuchElementException:
        print("not found by id xpath")

for i in setup:
    go_to_channel(i["server"],i["channel"],string)

driver.close()
  

Поэтому я ожидал бы, что оба сервера будут вести себя одинаково, потому что я просто не могу найти проблемный.

это тот, который работает

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

1. Почему вы переходите? Вы можете просто использовать URL канала

2. @KhanSaad это то, что я в итоге сделал

Ответ №1:

Могут быть несоответствия со скоростью обработки вашего кода. Сервер может обладать большей вычислительной мощностью и выполнять коды быстрее. Таким образом, элементы, которые вы пытаетесь найти, возможно, еще не загрузились. Я бы посоветовал использовать ожидание элемента перед его поиском.

Вот несколько примеров :

https://seleniumbyexamples.github.io/wait

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

1. Пожалуйста, добавьте подробности по ссылке к ответу. Ссылки могут быть разорваны в будущем, что сделает ответ недействительным.

2. Добавил ссылки. Спасибо