2014-10-15 7 views
15

Sto cercando di utilizzare il framework Richieste con python (http://docs.python-requests.org/en/latest/) ma la pagina che sto cercando di ottenere utilizza javascript per recuperare le informazioni che desidero.Utilizzo di python Richieste con pagine javascript

Ho cercato di cercare sul Web una soluzione ma il fatto che sto cercando con la parola chiave javascript la maggior parte delle cose che sto ottenendo è come rasentare il linguaggio javascript.

Esiste comunque l'utilizzo del framework delle richieste con pagine che utilizzano javascript?

risposta

18

Dovrete fare la stessa richiesta (usando la libreria Richieste) che sta facendo il javascript. Puoi utilizzare qualsiasi numero di strumenti (compresi quelli integrati in Chrome e Firefox) per ispezionare la richiesta http proveniente da javascript e semplicemente effettuare questa richiesta tu stesso da Python.

+0

Quindi non v'è alcun modo per avere le richieste di utilizzare JavaScript. – Ben

+3

No, Requests è una libreria http. Non può eseguire javascript. – sberry

+4

Dove hai visto e quale strumento hai usato per trovarlo Ben? Sto provando questo adesso e sono bloccato – codyc4321

6

Mentre il selenio può sembrare allettante e utile, ha un problema principale che non può essere risolto: le prestazioni. Calcolando ogni singola cosa che fa un browser, avrai bisogno di molto più potere. Anche PhantomJS non è in concorrenza con una semplice richiesta. Ti consiglio di utilizzare Selenium solo quando hai veramente bisogno di fare clic sui pulsanti. Se hai solo bisogno di javascript, ti consiglio PyQt (controlla https://www.youtube.com/watch?v=FSH77vnOGqU per impararlo).

Tuttavia, se si desidera utilizzare Selenium, si consiglia Chrome su PhantomJS. Molti utenti hanno problemi con PhantomJS in cui un sito Web semplicemente non funziona in Phantom. Anche Chrome può essere senza testa (non grafico)!

Innanzitutto, assicurati di aver installato ChromeDriver, da cui Selenium dipende per l'utilizzo di Google Chrome.

Quindi, assicuratevi di avere Google Chrome versione 60 o superiore controllando nel Chrome URL: // settings/help

Ora, tutto quello che dovete fare è il seguente codice:

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) 

Se non sai come usare selenio, ecco un breve panoramica:

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

elementi Trovare: utilizzare l'elementi o metodo degli elementi. Esempi:

driver.find_element_by_css_selector("div.logo-subtext") #Find your country in Google. (singular) 
  • driver.find_element (s) _by_css_selector (css_selector) # Ogni elemento che corrisponde a questo selettore CSS
  • driver.find_element (s) _by_class_name (class_name) # Ogni elemento con la seguente classe
  • driver.find_element (s) _by_id (id) # Ogni elemento con il seguente ID
  • driver.find_element (s) _by_link_text (LINK_TEXT) # Ogni con il link testo completo
  • driv er.find_element (s) _by_partial_link_text (partial_link_text) # Ogni con testo di collegamento parziale.
  • driver.find_element (s) _by_name (nome) # Ogni elemento dove name = argomento
  • driver.find_element (s) _by_tag_name (tag_name) # Ogni elemento con l'argomento nome del tag

Ok! Ho trovato un elemento (o una lista di elementi). Ma cosa faccio adesso?

Questi sono i metodi che si possono fare su un elemento elem:

  • elem.tag_name # Potrebbe pulsante di ritorno in una.
  • elem.get_attribute ("id") # Restituisce l'ID di un elemento.
  • elem.text # Il testo interno di un elemento.
  • elem.clear() # Cancella un input di testo.
  • elem.is_displayed() # True per gli elementi visibili, False per gli elementi invisibili.
  • elem.is_enabled() # Vero per un ingresso abilitato, Falso altrimenti.
  • elem.is_selected() # È selezionato questo pulsante di opzione o elemento di spunta?
  • elem.location # Un dizionario che rappresenta la posizione X e Y di un elemento sullo schermo.
  • elem.click() # Fare clic su elem.
  • elem.send_keys ("thelegend27") # Tipo thelegend27 in elem (utile per gli ingressi di testo)
  • elem.submit() # Invia la forma in cui elem partecipa.

comandi speciali:

  • driver.back() # Fare clic sul pulsante Indietro.
  • driver.forward() # Fare clic sul pulsante Avanti.
  • driver.refresh() # Aggiorna la pagina.
  • driver.quit() # Chiudi il browser con tutte le schede.
  • foo = driver.execute_script ("ritorno 'ciao';") # eseguire JavaScript (potrebbe prendere i valori di ritorno!)
Problemi correlati