2016-10-30 3 views
0

Ich brauche ein wenig Daten von einem HTML-Tag, das nur erscheint, wenn Sie in einer Site angemeldet sind. Ich muss es in Python oder Javascript tun. Javascript hat die Cross-Origin-Browser-Policy (CORS) als Hindernis.Kratzen Sie die aktuell geöffnete Webseite oder erhalten Sie Live-HTML mit einer anderen Methode?

Ich kann serverseitigen Code nicht verwenden. Ich kann keine iframes verwenden.

Die Daten sind leicht verfügbar, wenn Sie die Seiten-URL in Chrome oder FireFox öffnen, da Sie sich wie Facebook anmelden, also werden wir es als Beispiel verwenden. Wir werden sagen, dass ich die Daten aus dem ersten Element meines Facebook News Feeds erhalten möchte.

Ich habe versucht, die Webseite zu scrappen und den Benutzer-Agent-Wert mit Pythons Urllib-Modul übergeben. Ich habe versucht, Yahoos YQL-Tool mit Javascript zu verwenden. Beide haben den gewünschten HTML-Code ohne die benötigten Werte zurückgegeben. Dies liegt daran, dass es nicht meine Browser verwendet, um die erforderlichen Werte zu speichern.

Gibt es eine Möglichkeit, eine bereits geöffnete Webseite zu scrappen? Angenommen, ich habe Facebook geöffnet und Code ausgeführt, der meine News Feed-Daten vom Browser erhalten hat.

Gibt es eine andere Methode, die ich nicht erwähnt habe, um dies zu erreichen?

Hintergrund: Ich erstelle eine Autobumpper für ein Forum (innerhalb der Site-Regeln) und brauche einige generierte Werte aus der Website HTML, aber wird keine Zusammenarbeit in diesem Sinne vom Eigentümer erhalten.

+0

Es ist durchaus möglich, serverseitigen Code um Cookies und damit mehrseitige Sessions inklusive Login-Flow zu unterstützen. – ceejayoz

+0

@ceejayoz Wenn ich es absolut nicht kann, wie ich beschrieben habe, könnte ich auf etwas so zurückgreifen. Wie könnte das geschehen? – user3055938

Antwort

0

Sie können versuchen, mit Python Selenic Webdriver, wie Sie sich anmelden und HTML-Quelle erhalten können.

müssen Sie Selen ersten pip installieren und die chromedriver.exe von Selen Website http://docs.seleniumhq.org/

hier downloaden ist ein Beispielcode i auf gmail verwenden:

from selenium import webdriver 

#you have to download the chromedriver from selenium hq homepage 
chromedriver_path = r'your chromedriver.exe path here' 
#create webdriver object and get url 
driver = webdriver.Chrome(chromedriver_path) 
driver.implicitly_wait(1) 
driver.get('https://www.google.com/gmail') 

#login 
driver.find_element_by_css_selector('#Email').send_keys('[email protected]') 
driver.find_element_by_css_selector('#next').click() 
driver.find_element_by_css_selector('#Passwd').send_keys('1234') 
driver.find_element_by_css_selector('#signIn').click() 


#get html 
html = driver.page_source 
+0

Das ist ziemlich toll. Allerdings muss ich den Benutzer anmelden, den ich nicht behandeln möchte, und es gibt auch eine Zwei-Faktor-Authentifizierung, so dass ich nicht weiß, ob es trotzdem funktioniert. Gibt es eine Möglichkeit, das zu tun, aber verwenden Sie einen Browser mit intakten Cookies? Auf diese Weise kann sich ein Benutzer in seinem Browser anmelden und seine Details nicht in das Programm eingeben. Oder erfordert das, dass ich den Benutzer überhaupt anmelde? Klingt wie es ist möglich google chrome, vielleicht innerhalb des Treibers. – user3055938

+0

Ich bin nicht sehr vertraut mit diesem, aber Sie können versuchen, Selen zu verwenden, um die URL zu erhalten und dann manuell die 2-Faktor-Authentifizierung einzuloggen. Danach können Sie versuchen, die Cookies zu speichern. – foonspeed

+0

[link] (http://stackoverflow.com/questions/15058462/how-to-save-and-load-cookies-using-python-selenium-webdriver) – foonspeed

Verwandte Themen