0
votes

Comment faire défiler dans YouTube en utilisant le sélénium?

Je veux activer la boîte de commentaire dans YouTube pour laquelle j'ai besoin de faire défiler vers le bas.
Voici ce que je fais en ce moment: -

from selenium import webdriver

driver = webdriver.Chrome()
driver.get("https://www.youtube.com/watch?v=l5LfjYmNEJs&t=160s")

driver.execute_script("window.scrollTo(0, document.body.scrollHeight);")


7 commentaires

Dupliquer possible Stackoverflow.com/Questtions/20986631/...


@Kajalkundu J'ai vu cette réponse avant cette question. Mon problème est que le code ci-dessus fonctionne dans presque tous les sites sauf YouTube.


C'est plus d'une question javascript. Peut-être que vous pouvez essayer: pilote.execute_script ("document.getElementByID (" Footer-Links -Secondaire "). Scrolli NtoView ();")


@Ardweaden I a exécuté le code Il donne l'erreur suivante - selenium.common.exceptions.webdriveception: message: erreur inconnu: impossible de lire la propriété 'ScrollintOView' de null


Ah, désolé, je l'ai essayé sur la page principale au lieu de la page vidéo. Il n'ya peut-être pas d'élément avec cet identifiant sur ce dernier. Que diriez-vous de pilote.execute_script ("document.getelementByID (" Footer-Links ") .ScrollinToView ();") ?


@Ardweaden, il donne toujours la même erreur. Je pense que le problème est avec ScrollINTOView ?


Non, la question est qu'il n'y a pas d'élément comme ça. J'ai vérifié avec sélénium sur mon ordinateur et je peux le voir n'a pas de pied de page. Cela fonctionnerait avec l'ancienne mise en page YouTube.


3 Réponses :


5
votes

J'ai trouvé une solution.see si cela aide. temps.sleep code> est requis pour ralentir tout en boucle.

from selenium import webdriver
from selenium.webdriver.common.keys import Keys
import time
driver = webdriver.Chrome()
driver.get("https://www.youtube.com/watch?v=l5LfjYmNEJs&t=160s")

while(True):
    height = driver.execute_script("return document.body.scrollHeight")
    time.sleep(1)
    driver.find_element_by_tag_name('body').send_keys(Keys.END)
    if int(height)==0:
        break


0 commentaires

0
votes

La réponse de Kunduk est géniale! Mais n'a pas fermé pour moi dans Firefox forte> pour obtenir toutes les vidéos d'une chaîne. J'ai donc modifié la partie JavaScript forte> partie

 height = driver.execute_script("return document.documentElement.scrollHeight(window.innerHeight + window.scrollY);")


0 commentaires

0
votes

Une réponse de confiance en vous n'a pas fonctionné pour moi. Mais cela a fonctionné.

from selenium import webdriver
import time

driver = webdriver.Chrome()
driver.get("https://www.youtube.com/c/klikklak/videos")

while True:
    scroll_height = 2000
    document_height_before = driver.execute_script("return 
    document.documentElement.scrollHeight")
    driver.execute_script(f"window.scrollTo(0, {document_height_before 
    + scroll_height});")
    time.sleep(1.5)
    document_height_after = driver.execute_script("return 
    document.documentElement.scrollHeight")
    if document_height_after == document_height_before:
        break


0 commentaires