webentwicklung-frage-antwort-db.com.de

Melden Sie sich mit Python-Anfragen an der Website an

Ich versuche, mich bei https://www.voxbeam.com/login anzumelden, indem Sie Daten zum Abwracken von Daten verwenden. Ich bin ein Python-Anfänger und habe meistens Tutorials absolviert. Außerdem habe ich mit BeautifulSoup selbst Web-Scraping gemacht.

Blick auf das HTML:

<form id="loginForm" action="https://www.voxbeam.com//login" method="post" autocomplete="off">

<input name="userName" id="userName" class="text auto_focus" placeholder="Username" autocomplete="off" type="text">

<input name="password" id="password" class="password" placeholder="Password" autocomplete="off" type="password">

<input id="challenge" name="challenge" value="78ed64f09c5bcf53ead08d967482bfac" type="hidden">

<input id="hash" name="hash" type="hidden">

Ich verstehe, dass ich die Methode post verwenden und userName und password senden sollte.

Ich versuche das:

import requests
import webbrowser

url = "https://www.voxbeam.com/login"
login = {'userName': 'xxxxxxxxx',
         'password': 'yyyyyyyyy'}

print("Original URL:", url)

r = requests.post(url, data=login)

print("\nNew URL", r.url)
print("Status Code:", r.status_code)
print("History:", r.history)

print("\nRedirection:")
for i in r.history:
    print(i.status_code, i.url)

# Open r in the browser to check if I logged in
new = 2  # open in a new tab, if possible
webbrowser.open(r.url, new=new)

Ich erwarte, dass nach einem erfolgreichen Login die URL zum Dashboard in r abgerufen wird, sodass ich damit beginnen kann, die benötigten Daten zu kratzen.

Wenn ich den Code mit den Authentifizierungsinformationen anstelle von xxxxxx und yyyyyy ausführen, erhalte ich die folgende Ausgabe:

Original URL: https://www.voxbeam.com/login

New URL https://www.voxbeam.com/login
Status Code: 200
History: []

Redirection:

Process finished with exit code 0

Ich bekomme im Browser einen neuen Tab mit www.voxbeam.com/login

Stimmt etwas nicht im Code? Fehlt mir etwas im HTML-Code? Es ist in Ordnung zu erwarten, dass die Dashboard-URL in r geladen wird oder umgeleitet wird und versucht wird, die URL in einem Browser-Tab zu öffnen, um die Antwort visuell zu überprüfen Dinge anders machen?

Ich habe seit ein paar Tagen viele ähnliche Fragen hier gelesen, aber es scheint, dass jeder Website-Authentifizierungsprozess ein bisschen anders ist, und ich habe http://docs.python-requests.org/de/latest/user/ Authentifizierung / , die andere Methoden beschreibt, aber ich habe nichts im HTML-Code gefunden, aus dem hervorgeht, dass ich anstelle von post eine davon verwenden sollte.

Ich habe es auch versucht

r = requests.get(url, auth=('xxxxxxxx', 'yyyyyyyy')) 

aber es scheint auch nicht zu funktionieren.

5
Pablo

Wie oben gesagt, sollten Sie Werte aus allen Formularfeldern senden. Diese finden Sie im Web-Inspector des Browsers. Dieses Formular sendet 2 zusätzliche versteckte Werte:

url = "https://www.voxbeam.com//login"
data = {'userName':'xxxxxxxxx','password':'yyyyyyyyy','challenge':'zzzzzzzzz','hash':''}  
# note that in email have encoded '@' like uuuuuuu%40gmail.com      

session = requests.Session()
r = session.post(url, headers=headers, data=data)

Viele Sites haben auch Schutz vor einem Bot wie ausgeblendete Formularfelder, js, verschlüsselte Werte senden usw.

1) Verwenden Sie Cookies von der manuellen Anmeldung:

url = "https://www.voxbeam.com"
headers = {'user-agent': "Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/57.0.2987.98 Safari/537.36"}
cookies = {'PHPSESSID':'zzzzzzzzzzzzzzz', 'loggedIn':'yes'}

s = requests.Session()
r = s.post(url, headers=headers, cookies=cookies)

2) Verwenden Sie das Modul Selen:

from Selenium import webdriver
from Selenium.webdriver.common.keys import Keys

url = "https://www.voxbeam.com//login"
driver = webdriver.Firefox()
driver.get(url)

u = driver.find_element_by_name('userName')
u.send_keys('xxxxxxxxx')
p = driver.find_element_by_name('password')
p.send_keys('yyyyyyyyy')
p.send_keys(Keys.RETURN)
8
bl79

Versuchen Sie, die URL wie folgt klarer anzugeben:

  url=https://www.voxbeam.com//login?id=loginForm

Dadurch wird setFocus im Anmeldeformular festgelegt, sodass die Methode POST angewendet wird

1
Mohammad Jbber

Es ist sehr schwierig, abhängig davon, wie die Website den Anmeldevorgang abwickelt. Was ich jedoch tat, war, dass ich Charles, eine Proxy-Anwendung, verwendete und Anfragen hörte, die mein Browser an den Server der Website gesendet hat, während ich mich manuell anmeldete. Danach habe ich genau den gleichen Header und Cookie, das in Charles gezeigt wurde, in meinen eigenen Python-Code kopiert und es hat funktioniert! Ich gehe davon aus, dass der Cookie und der Header verwendet werden, um das Einloggen von Bot zu verhindern. 

0
Reza Hosseini