2016-05-18 25 views
0

Ich verwende Selen-Bibliothek für Python und Chrom-Browser.python-selenium- klicken Sie auf entstehenden Link

Ich brauche einen Link aus der URL klicken:

http://www.youtube-mp3.org/ 

Die Idee ist, eine Liste von Videos zu MP3-Dateien in einem frühen Code konvertierten zum Download bereit. Mein Skript ist:

from selenium import webdriver 
from selenium.webdriver.common.keys import Keys 

import time 
url2='http://www.youtube-mp3.org/' 

chromedriver = 'C:\\exp\\chromedriver.exe' #where you have the file 
browser = webdriver.Chrome(chromedriver) 
browser.get(url2) 

direc = browser.find_element_by_id("youtube-url") 
direc.clear() 

direc.send_keys("https://www.youtube.com/watch?v=nYh-n7EOtMA") #an example url 
browser.find_element_by_id("btns").click() 

Bis hier ist alles in Ordnung.

Jetzt muss ich den Download-Link drücken, der nach der Konvertierung des Videos erscheint.

Die HTML für diesen Teil ist:

<div id="dl_link" style="display: block;"> 
    <a href="/get?video_id=nYh-n7EOtMA&amp;h=-1&amp;r=-1.1" style="display:none"><b>Download</b></a> 
    <a href="/get?video_id=nYh-n7EOtMA&amp;ts_create=1463533555&amp;r=MTg2LjYwLjE2MS4yMTE%3D&amp;h2=5ad90182ae65fea567f844c3b6a933aa&amp;s=145334"><b>Download</b></a><a href="/get?video_id=nYh-n7EOtMA&amp;h=-1&amp;r=-1.1" style="display:none"> 
    <b>Download</b> 
</a></div> 

Aber ich kann es nur sehen, wenn ich „inspizieren Objekt“ wählen, denn wenn ich „Ansicht Quellcode“ wählen (nachdem ich die URL eingefügt und die Video und Link erscheinen), da ist nichts drin.

Ich habe versucht, mit:

browser.find_element_by_partial_link_text("create").click() 

Aber ich habe einen Fehler:

NoSuchElementException: Message: no such element

und auch mit:

browser.find_element_by_name("dl_link").click() 

Fehler:

NoSuchElementException: Message: no such element: Unable to locate element: {"method":"name","selector":"dl_link"}

und auch mit:

browser.find_element_by_id("dl_link").click() 

und bekam:

ElementNotVisibleException: Message: element not visible

Also, meine Fragen sind:

  1. , warum ich nicht den HTML-Skript für den Download-Link sehen kann, wenn ich drücken Quellcode ansehen?
  2. ist es möglich, den Prozess (Herunterladen der MP3-Datei) mit Python abzuschließen?
  3. macht die Tatsache, dass die Webseite Java-Skripte enthält, mit dem Problem zu tun?
  4. Gibt es eine andere Bibliothek, um dies zu tun?

danke.

+0

Ändern zu diesem 'browser.find_element_by_name (" dl_link "). click()' soll ideal funktionieren. – nullpointer

+0

@nullpointer, ich habe das schon einmal probiert und habe keine Die Fehlermeldung lautet: Nachricht: kein solches Element: Element kann nicht gefunden werden: {"method": "name", "selector": "dl_link"} – GabyLP

Antwort

1

Warum erscheinen die Elemente in der inspect-Funktion, aber nicht im Quellcode?

Die HTML-Elemente können entweder automatisch durch eine Art Skript (z. B. Javascript, VBScript, ...) generiert oder von AJAX empfangen werden. Der Quellcode enthält die Antwort in einem Textformat, was bedeutet, dass kein Skript ausgeführt werden konnte.Die inspizieren-Funktion Ihres Browsers, auf der anderen Seite zeigt die aktuellen Stand

Was Sie könnten das Problem zu verengen tun:

  1. Besuchen Sie die Seite in einem Browser und deaktivieren Javascript. Wenn die Elemente jetzt nicht vorhanden sind, können Sie davon ausgehen, dass Javascript die fraglichen Elemente einfügt.

  2. Wenn der obige Text der Fall ist, schalten Sie Javascript wieder ein und rufen Sie die Netzwerkregisterkarte in den Entwicklertools auf. Laden Sie die Seite neu und sehen Sie sich die angeforderte Ressource an. Überprüfen Sie, ob Sie dort AJAX/API-Anfragen finden können. Wenn ja, überprüfen Sie, wie diese vorgenommen werden, und versuchen Sie, sie zu replizieren.

  3. Wenn Sie keine AJAX/API-Aufrufe finden können, werden die Elemente anders generiert. Überprüfen Sie den Quellcode für Skriptdateien (HTML-Tag) und überprüfen Sie den Code im Inneren für weitere Informationen.

Ich bin nicht bekannt, dass Bibliotheken, die Ihnen heraus hier helfen könnten (obwohl vielleicht ein oder zwei sein, nicht ich Python-Code so viel), aber es ist auf jeden Fall möglich, den Inhalt Sie brauchen, um (möglicherweise ein wenig schwierig, hängt davon ab, wie viel der Website-Besitzer versucht

Verwandte Themen