2014-10-15 15 views
15

Ich versuche, das Requests-Framework mit Python (http://docs.python-requests.org/en/latest/) zu verwenden, aber die Seite, die ich versuche, zu bekommen, verwendet Javascript, um die Informationen zu holen, die ich will.Verwenden von Python-Anfragen mit JavaScript-Seiten

Ich habe versucht, im Internet nach einer Lösung zu suchen, aber die Tatsache, dass ich mit dem Schlüsselwort javascript suche, ist das meiste, was ich bekomme, wie man mit der Javascriptsprache kratzt.

Gibt es sowieso das Anfrage-Framework mit Seiten, die JavaScript verwenden?

Antwort

18

Sie müssen die gleiche Anfrage (mit der Requests-Bibliothek), die das Javascript macht. Sie können eine beliebige Anzahl von Tools (einschließlich derer, die in Chrome und Firefox integriert sind) verwenden, um die HTTP-Anfrage zu prüfen, die von Javascript kommt, und diese Anfrage einfach selbst von Python aus stellen.

+0

So gibt es keine Möglichkeit, Anfragen Javascript verwenden zu haben. – Ben

+3

Nein, Anfragen ist eine http-Bibliothek. Es kann kein Javascript laufen. – sberry

+4

Wo hast du gesucht und mit welchem ​​Tool hast du Ben gefunden? Ich versuche das gerade jetzt und ich stecke fest – codyc4321

6

Während Selen verlockend und nützlich erscheint, hat es ein Hauptproblem, das nicht behoben werden kann: Leistung. Wenn Sie jedes einzelne Ding eines Browsers berechnen, benötigen Sie viel mehr Energie. Selbst PhantomJS konkurriert nicht mit einer einfachen Anfrage. Ich empfehle, dass Sie Selenium nur dann verwenden, wenn Sie wirklich auf Schaltflächen klicken müssen. Wenn Sie nur Javascript benötigen, empfehle ich PyQt (überprüfen Sie https://www.youtube.com/watch?v=FSH77vnOGqU, um es zu lernen).

Wenn Sie jedoch Selenium verwenden möchten, empfehle ich Chrome über PhantomJS. Viele Benutzer haben Probleme mit PhantomJS, wo eine Website in Phantom einfach nicht funktioniert. Chrome kann auch kopflos (nicht grafisch) sein!

Stellen Sie zunächst sicher, dass Sie ChromeDriver installiert haben, von dem Selenium für die Verwendung von Google Chrome abhängig ist.

Dann stellen Sie sicher, dass Sie Google Chrome Version 60 oder höher, indem sie es in der URL-Chrom-Überprüfung: // settings/Jetzt

helfen, alles, was Sie tun müssen, ist der folgende Code:

from selenium.webdriver.chrome.options import Options 
from selenium import webdriver 

chrome_options = Options() 
chrome_options.add_argument("--headless") 

driver = webdriver.Chrome(chrome_options=chrome_options) 

Wenn Sie nicht wissen, wie Selen zu verwenden, hier ist ein kurzer Überblick:

driver.get("https://www.google.com") #Browser goes to google.com 

Finding Elemente: verwenden Sie entweder die Elemente oder Elemente-Methode. Beispiele:

driver.find_element_by_css_selector("div.logo-subtext") #Find your country in Google. (singular) 
  • driver.find_element (n) _by_css_selector (css_selector) # Jedes Element, das diesem CSS-Selektor passt
  • driver.find_element (n) _by_class_name (class_name) # Jedes Element mit der folgenden Klasse
  • driver.find_element (n) _by_id (id) # Jedes Element mit der folgenden ID
  • driver.find_element (n) _by_link_text (LINK_TEXT) # Jeder mit dem vollständigen Link-Text
  • driv er.find_element (e) _by_partial_link_text (partiell_link_text) # Jeder mit partiellem Linktext.
  • driver.find_element (n) _by_name (name) # Jedes Element where name = Argument
  • driver.find_element (n) _by_tag_name (tag_name) # Jedes Element mit dem Tag-Namen Argumente

Ok! Ich habe ein Element (oder eine Elementliste) gefunden. Aber was mache ich jetzt?

Hier sind die Methoden, die Sie auf einem Element tun Elem:

  • elem.tag_name # -Taste in einem zurückkehren kann.
  • elem.get_attribute ("id") # Gibt die ID eines Elements.
  • elem.text # Der innere Text eines Elements.
  • elem.clear() # Löscht eine Texteingabe.
  • elem.is_displayed() # gilt für sichtbare Elemente, Falsch für unsichtbare Elemente.
  • elem.is_enabled() # Wahr bei einem aktivierten Eingang, sonst Falsch.
  • elem.is_selected() # Ist das Optionsfeld oder ausgewählte Checkbox Element?
  • elem.location # A Wörterbuch die X- und Y-Position eines Elements auf dem Bildschirm darstellt.
  • elem.click() # Klicken Sie Elem.
  • elem.send_keys ("thelegend27") # Typ thelegend27 in Elem (nützlich für Texteingaben)
  • elem.submit() # Senden Sie das Formular, in dem Elem teilnimmt.

Spezielle Befehle:

  • driver.back() # Klicken Sie auf die Schaltfläche Zurück.
  • driver.forward() # Klicken Sie auf die Schaltfläche Forward.
  • driver.refresh() # Aktualisieren Sie die Seite.
  • driver.quit() # Schließen Sie den Browser mit allen Registerkarten.
  • foo = driver.execute_script ("return 'Hallo';") # javascript Execute (KÖNNTE RETURN Werte annehmen!)