Я пытался создать программу, которая отправляет комментарий под видео на YouTube, когда внезапно возникает проблема send_keys () - PullRequest
2 голосов
/ 09 июля 2020

Я написал этот код для отправки комментариев под видео на YouTube, но когда я его выполняю, он выдает мне эту ошибку (строка 20, строка msg_box.send_keys(msg)):

Traceback (most recent call last):
  File "C:/Users/isiac/PycharmProjects/webtest/youtube test.py", line 20, in <module>
    msg_box.send_keys(msg)
  File "C:\Users\isiac\PycharmProjects\webtest\venv\lib\site-packages\selenium\webdriver\remote\webelement.py", line 477, in send_keys
    self._execute(Command.SEND_KEYS_TO_ELEMENT,
  File "C:\Users\isiac\PycharmProjects\webtest\venv\lib\site-packages\selenium\webdriver\remote\webelement.py", line 633, in _execute
    return self._parent.execute(command, params)
  File "C:\Users\isiac\PycharmProjects\webtest\venv\lib\site-packages\selenium\webdriver\remote\webdriver.py", line 321, in execute
    self.error_handler.check_response(response)
  File "C:\Users\isiac\PycharmProjects\webtest\venv\lib\site-packages\selenium\webdriver\remote\errorhandler.py", line 242, in check_response
    raise exception_class(message, screen, stacktrace)
selenium.common.exceptions.ElementNotInteractableException: Message: element not interactable

idk почему ты можешь мне помочь?

from selenium import webdriver
import time

again = str("yes")

while again == 'yes':
    driver = webdriver.Chrome()
    driver.get("https://www.youtube.com/watch?v=youtubevideo")
    driver.maximize_window()

    msg = input("write your message  ")
    count = int(input("send how much time you want to send it  "))

    input("ready and waiting  ")

    msg_box = driver.find_element_by_xpath("/html/body/ytd-app/div/ytd-page-manager/ytd-watch-flexy/div[4]/div[1]/div/ytd-comments/ytd-item-section-renderer/div[1]/ytd-comments-header-renderer/div[5]/ytd-comment-simplebox-renderer/div[1]/yt-formatted-string")

    for index in range(count):
        time.sleep(5)
        msg_box.send_keys(msg)
        time.sleep(5)
        driver.find_element_by_xpath("/html/body/ytd-app/div/ytd-page-manager/ytd-watch-flexy/div[4]/div[1]/div/ytd-comments/ytd-item-section-renderer/div[1]/ytd-comments-header-renderer/div[5]/ytd-comment-simplebox-renderer/div[3]/ytd-comment-dialog-renderer/ytd-commentbox/div/div[4]/div[5]/ytd-button-renderer[2]/a/paper-button").click

    again = str(input("do you want to do it again?  "))

    print("acknowledge")

1 Ответ

0 голосов
/ 10 июля 2020

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

Чтобы прокрутить вниз, чтобы включить поле комментариев измените свой скрипт следующим образом:

from selenium import webdriver
from selenium.webdriver.common.keys import Keys # needed to send END key
import time

again = "yes" # "yes is already a string

while again == "yes":
    driver = webdriver.Chrome()
    driver.get("https://www.youtube.com/watch?v=youtubevideo")
    driver.maximize_window()
    time.sleep(1)
    driver.find_element_by_tag_name('body').send_keys(Keys.END) # this is the important part

    msg = input("write your message  ")
    count = int(input("send how much time you want to send it  "))

    print("ready and waiting") # we don't need input() here

    msg_box = driver.find_element_by_xpath("/html/body/ytd-app/div/ytd-page-manager/ytd-watch-flexy/div[4]/div[1]/div/ytd-comments/ytd-item-section-renderer/div[1]/ytd-comments-header-renderer/div[5]/ytd-comment-simplebox-renderer/div[1]/yt-formatted-string")

    for index in range(count):
        time.sleep(5)
        msg_box.send_keys(msg)
        time.sleep(5)
        driver.find_element_by_xpath("/html/body/ytd-app/div/ytd-page-manager/ytd-watch-flexy/div[4]/div[1]/div/ytd-comments/ytd-item-section-renderer/div[1]/ytd-comments-header-renderer/div[5]/ytd-comment-simplebox-renderer/div[3]/ytd-comment-dialog-renderer/ytd-commentbox/div/div[4]/div[5]/ytd-button-renderer[2]/a/paper-button").click()

    again = input("do you want to do it again?  ") # input() always returns a str

    print("acknowledge")

Я на самом деле не входил в YouTube и не оставлял комментарий к случайному видео, поэтому я не знаю, действителен ли ваш второй XPath, но, надеюсь, вы получить идею.

...