Heim > Backend-Entwicklung > Python-Tutorial > Mehrere Methoden der Python-simulierten Anmeldung

Mehrere Methoden der Python-simulierten Anmeldung

不言
Freigeben: 2018-06-02 14:46:36
Original
1786 Leute haben es durchsucht

In diesem Artikel werden hauptsächlich verschiedene Methoden der Python-Simulation vorgestellt. Jede Methode wird Ihnen im Detail vorgestellt

Text

Methode 1: Bekannte Cookies direkt verwenden, um auf

Funktionen zuzugreifen:

Einfach , aber Sie müssen sich zuerst im Browser anmelden

Prinzip:

Einfach ausgedrückt werden Cookies in dem Client gespeichert, der die Anfrage initiiert, und der Server verwendet Cookies, um zwischen verschiedenen Clients zu unterscheiden. Da es sich bei HTTP um eine zustandslose Verbindung handelt, kann der Server beim gleichzeitigen Empfang mehrerer Anfragen nicht ermitteln, welche Anfragen vom selben Client initiiert wurden. Das Verhalten „Zugriff auf Seiten, die erst nach der Anmeldung sichtbar sind“ erfordert, dass der Client dem Server nachweist: „Ich bin der Client, der sich gerade angemeldet hat.“ Daher wird ein Cookie benötigt, um den Kunden zu identifizieren und seine Informationen (z. B. Anmeldestatus) zu speichern.

Das bedeutet natürlich auch, dass wir, solange wir das Cookie eines anderen Clients erhalten, so tun können, als ob es dieser wäre, um mit dem Server zu kommunizieren. Das gibt unserem Programm eine Chance.

Wir melden uns zunächst mit einem Browser an und verwenden dann Entwicklertools, um Cookies anzuzeigen. Indem Sie dann das Cookie in das Programm übertragen und eine Anfrage an die Website senden, kann Ihr Programm vorgeben, der Browser zu sein, in dem Sie sich gerade angemeldet haben, und die Seite abrufen, die erst nach der Anmeldung angezeigt wird.

Spezifische Schritte:

1. Melden Sie sich mit einem Browser an und rufen Sie die Cookie-Zeichenfolge im Browser ab

Zuerst verwenden Browser-Anmeldung. Öffnen Sie die Entwicklertools erneut und gehen Sie zur Registerkarte „Netzwerk“. Suchen Sie links in der Spalte „Name“ nach der aktuellen URL, wählen Sie rechts die Registerkarte „Header“ aus und sehen Sie sich die Anforderungsheader an, die die von der Website an den Browser ausgegebenen Cookies enthalten. Ja, es ist die Saite dahinter. Kopieren Sie es, wir werden es später im Code verwenden.

Beachten Sie, dass Sie sich am besten anmelden, bevor Sie Ihr Programm ausführen. Wenn Sie sich zu früh anmelden oder den Browser schließen, ist es wahrscheinlich, dass das kopierte Cookie abläuft.

2. Code schreiben

Version der URL-Bibliothek:

import sys
import io
from urllib import request
sys.stdout = io.TextIOWrapper(sys.stdout.buffer,encoding='utf8') #改变标准输出的默认编码
#登录后才能访问的网站
url = 'http://ssfw.xmu.edu.cn/cmstar/index.portal'
#浏览器登录后得到的cookie,也就是刚才复制的字符串
cookie_str = r'JSESSIONID=xxxxxxxxxxxxxxxxxxxxxx; iPlanetDirectoryPro=xxxxxxxxxxxxxxxxxx'
#登录后才能访问的网页
url = 'http://ssfw.xmu.edu.cn/cmstar/index.portal'
req = request.Request(url)
#设置cookie
req.add_header('cookie', raw_cookies)
#设置请求头
req.add_header('User-Agent', 'Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/60.0.3112.113 Safari/537.36')
resp = request.urlopen(req)
print(resp.read().decode('utf-8'))
Nach dem Login kopieren

Anfragen Bibliotheksversion:

import requests
import sys
import io
sys.stdout = io.TextIOWrapper(sys.stdout.buffer,encoding='utf8') #改变标准输出的默认编码
#登录后才能访问的网页
url = 'http://ssfw.xmu.edu.cn/cmstar/index.portal'
#浏览器登录后得到的cookie,也就是刚才复制的字符串
cookie_str = r'JSESSIONID=xxxxxxxxxxxxxxxxxxxxxx; iPlanetDirectoryPro=xxxxxxxxxxxxxxxxxx'
#把cookie字符串处理成字典,以便接下来使用
cookies = {}
for line in cookie_str.split(';'):
 key, value = line.split('=', 1)
 cookies[key] = value
Nach dem Login kopieren

Methode 2: Simulieren Sie die Anmeldung und bringen Sie dann das erhaltene Cookie zum Zugriff

Prinzip:

Wir senden zunächst eine Anmeldeanfrage an die Website im Programm, d. h. senden ein Formular mit Anmeldeinformationen (Benutzername, Passwort). , usw.). Rufen Sie das Cookie aus der Antwort ab und bringen Sie dieses Cookie mit, wenn Sie in Zukunft andere Seiten besuchen, damit Sie die Seite erhalten, die nur nach dem Anmelden angezeigt werden kann.

Spezifische Schritte:

1. Finden Sie heraus, an welche Seite das Formular gesendet wird

Sie müssen es noch verwenden das Browser-Entwicklertool. Gehen Sie zur Registerkarte „Netzwerk“ und aktivieren Sie „Protokoll beibehalten“ (wichtig!). Melden Sie sich in Ihrem Browser auf der Website an. Suchen Sie dann in der Spalte „Name“ links nach der Seite, an die das Formular gesendet wurde. Wie finde ich es? Schauen Sie nach rechts und gehen Sie zur Registerkarte „Kopfzeilen“. Zunächst sollte im Abschnitt „Allgemein“ die Anforderungsmethode „POST“ lauten. Zweitens sollte es unten einen Abschnitt namens „Formulardaten“ geben, in dem Sie den gerade eingegebenen Benutzernamen und das Passwort sehen können. Sie können sich auch den Namen auf der linken Seite ansehen. Wenn er das Wort login enthält, handelt es sich möglicherweise um die Seite, auf der das Formular eingereicht wird (nicht unbedingt!).

An dieser Stelle ist zu betonen, dass die „Seite, an die das Formular übermittelt wird“ in der Regel nicht die Seite ist, auf der Sie Ihren Benutzernamen und Ihr Passwort eingeben! Verwenden Sie also die Tools, um es zu finden.

2. Finden Sie heraus, welche Daten übermittelt werden müssen

Obwohl Sie beim Anmelden im Browser nur Ihren Benutzernamen und Ihr Passwort eingegeben haben, enthält das Formular mehr Daten. Unter „Formulardaten“ können Sie alle Daten sehen, die übermittelt werden müssen.

3. Code schreiben

Version der URL-Bibliothek:

import sys
import io
import urllib.request
import http.cookiejar
sys.stdout = io.TextIOWrapper(sys.stdout.buffer,encoding='utf8') #改变标准输出的默认编码
#登录时需要POST的数据
data = {'Login.Token1':'学号', 
 'Login.Token2':'密码', 
 'goto:http':'//ssfw.xmu.edu.cn/cmstar/loginSuccess.portal', 
 'gotoOnFail:http':'//ssfw.xmu.edu.cn/cmstar/loginFailure.portal'}
post_data = urllib.parse.urlencode(data).encode('utf-8')
#设置请求头
headers = {'User-agent':'Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/60.0.3112.113 Safari/537.36'}
#登录时表单提交到的地址(用开发者工具可以看到)
login_url = ' http://ssfw.xmu.edu.cn/cmstar/userPasswordValidate.portal
#构造登录请求
req = urllib.request.Request(login_url, headers = headers, data = post_data)
#构造cookie
cookie = http.cookiejar.CookieJar()
#由cookie构造opener
opener = urllib.request.build_opener(urllib.request.HTTPCookieProcessor(cookie))
#发送登录请求,此后这个opener就携带了cookie,以证明自己登录过
resp = opener.open(req)
#登录后才能访问的网页
url = 'http://ssfw.xmu.edu.cn/cmstar/index.portal'
#构造访问请求
req = urllib.request.Request(url, headers = headers)
resp = opener.open(req)
print(resp.read().decode('utf-8'))
Nach dem Login kopieren

Anfragen Bibliotheksversion:

import requests
import sys
import io
sys.stdout = io.TextIOWrapper(sys.stdout.buffer,encoding='utf8') #改变标准输出的默认编码
#登录后才能访问的网页
url = 'http://ssfw.xmu.edu.cn/cmstar/index.portal'
#浏览器登录后得到的cookie,也就是刚才复制的字符串
cookie_str = r'JSESSIONID=xxxxxxxxxxxxxxxxxxxxxx; iPlanetDirectoryPro=xxxxxxxxxxxxxxxxxx'
#把cookie字符串处理成字典,以便接下来使用
cookies = {}
for line in cookie_str.split(';'):
 key, value = line.split('=', 1)
 cookies[key] = value
#设置请求头
headers = {'User-agent':'Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/60.0.3112.113 Safari/537.36'}
#在发送get请求时带上请求头和cookies
resp = requests.get(url, headers = headers, cookies = cookies)
print(resp.content.decode('utf-8'))
Nach dem Login kopieren

Es ist offensichtlich, dass die Anforderungsbibliothek bequemer zu verwenden ist~~~

Methode Drei: Verwenden Sie die Sitzung, um nach der Simulation der Anmeldung angemeldet zu bleiben

Prinzip:

Sitzung bedeutet Sitzung. Ähnlich wie Cookies ermöglicht es auch dem Server, den Client zu „erkennen“. Das einfache Verständnis besteht darin, jede Interaktion zwischen dem Client und dem Server als „Sitzung“ zu behandeln. Da sie sich in derselben „Sitzung“ befinden, weiß der Server natürlich, ob sich der Client angemeldet hat.

Spezifische Schritte:

1. Finden Sie heraus, an welche Seite das Formular gesendet wird

finden Sie die zu übermittelnden Daten heraus

  这两步和方法二的前两步是一样的

3.写代码

  requests库的版本

import requests
import sys
import io
sys.stdout = io.TextIOWrapper(sys.stdout.buffer,encoding='utf8') #改变标准输出的默认编码
#登录时需要POST的数据
data = {'Login.Token1':'学号', 
 'Login.Token2':'密码', 
 'goto:http':'//ssfw.xmu.edu.cn/cmstar/loginSuccess.portal', 
 'gotoOnFail:http':'//ssfw.xmu.edu.cn/cmstar/loginFailure.portal'}
#设置请求头
headers = {'User-agent':'Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/60.0.3112.113 Safari/537.36'}
#登录时表单提交到的地址(用开发者工具可以看到)
login_url = 'http://ssfw.xmu.edu.cn/cmstar/userPasswordValidate.portal'
#构造Session
session = requests.Session()
#在session中发送登录请求,此后这个session里就存储了cookie
#可以用print(session.cookies.get_dict())查看
resp = session.post(login_url, data)
#登录后才能访问的网页
url = 'http://ssfw.xmu.edu.cn/cmstar/index.portal'
#发送访问请求
resp = session.get(url)
print(resp.content.decode('utf-8'))
Nach dem Login kopieren

方法四:使用无头浏览器访问

特点:

  功能强大,几乎可以对付任何网页,但会导致代码效率低

原理:

  如果能在程序里调用一个浏览器来访问网站,那么像登录这样的操作就轻而易举了。在Python中可以使用Selenium库来调用浏览器,写在代码里的操作(打开网页、点击……)会变成浏览器忠实地执行。这个被控制的浏览器可以是Firefox,Chrome等,但最常用的还是PhantomJS这个无头(没有界面)浏览器。也就是说,只要把填写用户名密码、点击“登录”按钮、打开另一个网页等操作写到程序中,PhamtomJS就能确确实实地让你登录上去,并把响应返回给你。

具体步骤:

1.安装selenium库、PhantomJS浏览器

2.在源代码中找到登录时的输入文本框、按钮这些元素

  因为要在无头浏览器中进行操作,所以就要先找到输入框,才能输入信息。找到登录按钮,才能点击它。

  在浏览器中打开填写用户名密码的页面,将光标移动到输入用户名的文本框,右键,选择“审查元素”,就可以在右边的网页源代码中看到文本框是哪个元素。同理,可以在源代码中找到输入密码的文本框、登录按钮。

3.考虑如何在程序中找到上述元素

  Selenium库提供了find_element(s)_by_xxx的方法来找到网页中的输入框、按钮等元素。其中xxx可以是id、name、tag_name(标签名)、class_name(class),也可以是xpath(xpath表达式)等等。当然还是要具体分析网页源代码。

4.写代码

import requests
import sys
import io
from selenium import webdriver
sys.stdout = io.TextIOWrapper(sys.stdout.buffer, encoding='utf8') #改变标准输出的默认编码
#建立Phantomjs浏览器对象,括号里是phantomjs.exe在你的电脑上的路径
browser = webdriver.PhantomJS('d:/tool/07-net/phantomjs-windows/phantomjs-2.1.1-windows/bin/phantomjs.exe')
#登录页面
url = r'http://ssfw.xmu.edu.cn/cmstar/index.portal'
# 访问登录页面
browser.get(url)
# 等待一定时间,让js脚本加载完毕
browser.implicitly_wait(3)
#输入用户名
username = browser.find_element_by_name('user')
username.send_keys('学号')
#输入密码
password = browser.find_element_by_name('pwd')
password.send_keys('密码')
#选择“学生”单选按钮
student = browser.find_element_by_xpath('//input[@value="student"]')
student.click()
#点击“登录”按钮
login_button = browser.find_element_by_name('btn')
login_button.submit()
#网页截图
browser.save_screenshot('picture1.png')
#打印网页源代码
print(browser.page_source.encode('utf-8').decode())
browser.quit()
Nach dem Login kopieren

相关推荐:

Python模拟登陆实例详解

Das obige ist der detaillierte Inhalt vonMehrere Methoden der Python-simulierten Anmeldung. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Verwandte Etiketten:
Quelle:php.cn
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage