2017-07-06 4 views
0

Ich bin neu bei Python und ich weiß nicht einmal, ob ich richtig frage, aber die Sache ist, dass ich eine Anfrage an eine Seite senden muss, um mich einzuloggen und diese Seite sendet mir eine Nachricht, die mir das sagt Ich muss JavaScript aktivieren, bevor Sie diese Website verwenden.Kann ich umgehen "Javascript ist erforderlich" ohne Selenium oder ähnliches?

Ich habe es mit Selenium gemacht und alles ist in Ordnung, funktioniert gut (mehr Zeug, nicht nur die Anmeldung), aber jetzt möchte ich es ohne Selenium schaffen, eigentlich ohne irgendein Browserfenster, ist das überhaupt möglich? Ich schätze es ist, aber gut, ich brauche etwas Hilfe dabei, da ich nicht den Weg finde, es zu tun.

#!/usr/bin/python3 
import requests 

userEmail = "[email protected]" #using real data in the script 
userPass = "xxxxxxxxxxxxx" #using real data in the script 

headers = { 
    'User-Agent': 'Mozilla/5.0 (Windows NT 6.1; WOW64; rv:28.0) Gecko/20100101 Firefox/28.0', 
    'Accept': 'application/json, text/javascript, */*; q=0.01', 
    'Content-Type': 'application/x-www-form-urlencoded; charset=UTF-8', 
    'X-Requested-With': 'XMLHttpRequest' 
} 

def main(): 
    r = requests.post('https://www.thedomain.com/en/customer/account/loginPost/', 
    data = {'login[username]':userEmail, "login[password]":userPass}, headers=headers) 
    print(r.text) 

if __name__ == "__main__": main() 

Und dies ist die Botschaft, die ich erhalten:

<html> 
    <title>You are being redirected...</title> 
    <noscript>Javascript is required. Please enable javascript before you are allowed to see this page.</noscript> 
</html> 

Kann ich das ohne Selen umgehen?

+1

würde ich nicht sagen. Die Seite könnte dynamisch generiert werden (zum Beispiel mit Angular oder React). Wenn JS deaktiviert ist, besteht keine Chance, dass Sie den generierten Inhalt sehen können. –

+2

aber wenn Sie dies ohne ein Browserfenster als Ihre Hauptanforderung tun wollen, schauen Sie in phantomjs, Sie verwenden immer noch Selen, aber es ist ein "kopfloser" Browser, so dass kein Fenster erscheint, aber es kann immer noch das erforderliche Javascript –

+0

tut es Was für eine Antwort bekommst du? Wie funktioniert die Login-Logik? Normalerweise meldet man sich irgendwo an, wenn man einen Cookie oder etwas Ähnliches (mit der Sitzungs-ID) bekommt, das man bei allen folgenden Anfragen benutzt, um anzuzeigen, dass man gerade eingeloggt ist. – Metareven

Antwort

0

Verwenden Sie einen kopflosen Browser mit Selen.

Headless-Browser werden in der Befehlszeile ausgeführt. Sie müssen das JavaScript auf der Website ausführen, sogar noch mehr, wenn Sie von einem SPA ohne Server-Rendering sprechen. Dies bedeutet, dass Sie die Site erst sehen, nachdem JavaScript ausgeführt wurde.

Um einen kopflosen Browser zu verwenden, müssen Sie in Ihrem System install NodeJS.

Der bekannteste kopflos Browser ist PhantomJS, aber es gibt others:

sudo npm install -g phantomjs 

Nach der Installation der Treiber für Selen gesetzt:

driver = webdriver.PhantomJS() 

Und das ist es, wenn Sie laufen sollte nicht Sie können alles auf einem Server ausführen.

Prost!

EDIT

Ein andere Lösung ist pyvirtualdisplay zu verwenden, die wie der Name schon sagt, ist es eine virtuelle Anzeige erzeugt, die gleich erreicht, aber dies beispielsweise erlauben würde, zu tun, einen Chrome-Browser in einem laufen Server. schnelles Beispiel von here genommen:

from pyvirtualdisplay import Display 
from selenium import webdriver 

display = Display(visible=0, size=(1366, 768)) 
display.start() 
browser = webdriver.Firefox() 
browser.get('http://www.vionblog.com/') 
browser.save_screenshot('vionblog.png') 
browser.quit() 
display.stop() 
+0

Ich wollte das vermeiden, weil, wenn der Server ziemlich beschäftigt ist und ich zum Beispiel ein Problem beim Laden einer CSS-Datei habe, ich denke, das wird nicht funktionieren ... Wie auch immer, ich werde es versuchen, werde was sein Ich habe schon aber ohne ein ordentliches Fenster :) Danke für deine Antwort. – torpedete

+0

Gern geschehen.Denken Sie daran, dass vorzeitige Optimierung die Wurzel allen Übels ist. Ich habe einen Selenium + PhantomJS Scrapper in einem Server mit anderen Sellerie-Services in einem Medium EC2 verwendet und es funktionierte wie ein Zauber. Seien Sie also wirklich sehr sicher, dass Ihr Server ziemlich beschäftigt sein wird, und wenn es so ist, gibt es andere Lösungen, wie die Verwendung eines Servers ausschließlich für den Scrapper. – Willemoes

+0

Es gibt einige ** experimentelle ** Alternativen, wie 'pyV8', das ein Wrapper um V8 (JS-Engine) ist, nachdem Sie das JS vom Server bekommen haben, könnten Sie es damit ausführen, aber Sie hätten andere Probleme, wie zum Beispiel, wie man mehrere JS-Dateien laufen lässt. Wie ich gesagt habe, wirst du irgendwann den JS-Code irgendwo ausführen. Sie können auch versuchen, JS> Python zu konvertieren, aber das macht keinen Sinn und Sie haben keine Garantie, dass es wie das JS funktioniert. Aber ich denke speziell für das Web, das beste ist ein kopfloser Browser **. – Willemoes

Verwandte Themen