python - كيف "تسجيل الدخول" إلى موقع على شبكة الإنترنت باستخدام وحدة الطلبات بيثون؟




python-requests pyquery (3)

إذا كانت المعلومات التي تريدها موجودة على الصفحة ، فسيتم توجيهك إليها فور تسجيل الدخول ...

دعنا ck payload ck المتغيرة بدلاً من ذلك ، كما هو الحال في مستندات python-requests :

payload = {'inUserName': 'USERNAME/EMAIL', 'inUserPass': 'PASSWORD'}
url = 'http://www.locationary.com/home/index2.jsp'
requests.post(url, data=payload)

غير ذلك...

راجع https://stackoverflow.com/a/17633072/111362 أدناه.

أحاول نشر طلب لتسجيل الدخول إلى موقع ويب باستخدام الوحدة النمطية الطلبات في Python ولكن لا يعمل بالفعل. أنا جديد على هذا ... لذا لا يمكنني معرفة ما إذا كان ينبغي عليّ إنشاء ملفات تعريف الارتباط الخاصة بـ "اسم المستخدم" و "كلمة المرور" الخاصة بي أو نوع من ترخيص HTTP الذي وجدته (؟؟؟).

from pyquery import PyQuery
import requests

url = 'http://www.locationary.com/home/index2.jsp'

الآن ، أعتقد أنه من المفترض أن أستخدم "البريد" وملفات تعريف الارتباط ....

ck = {'inUserName': 'USERNAME/EMAIL', 'inUserPass': 'PASSWORD'}

r = requests.post(url, cookies=ck)

content = r.text

q = PyQuery(content)

title = q("title").text()

print title

لدي شعور بأنني أقوم بملفات تعريف الارتباط خطأ ... لا أعرف.

إذا لم يتم تسجيل الدخول بشكل صحيح ، فيجب أن يظهر عنوان الصفحة الرئيسية على "Locationary.com" وإذا كان كذلك ، فيجب أن يكون "الصفحة الرئيسية".

إذا كان بإمكانك شرح بعض الأمور عن الطلبات وملفات تعريف الارتباط بالنسبة لي ومساعدتي في هذا ، فسأقدر ذلك كثيرًا. :د

شكر.

... ما زال لم يعمل بعد حسنًا ... هذا هو ما تقوله صفحة HTML الرئيسية قبل تسجيل الدخول:

</td><td><img src="http://www.locationary.com/img/LocationaryImgs/icons/txt_email.gif">    </td>
<td><input class="Data_Entry_Field_Login" type="text" name="inUserName" id="inUserName"  size="25"></td>
<td><img src="http://www.locationary.com/img/LocationaryImgs/icons/txt_password.gif"> </td>
<td><input  class="Data_Entry_Field_Login"  type="password" name="inUserPass"     id="inUserPass"></td>

لذلك أعتقد أنني أفعل ذلك بشكل صحيح ، ولكن الناتج لا يزال "Locationary.com"

الإصدار الثاني:

أريد أن أتمكن من متابعة تسجيل الدخول لفترة طويلة وكلما طلبت الحصول على صفحة ضمن هذا النطاق ، أريد أن يظهر المحتوى كما لو كنت مسجلاً الدخول.


أعلم أنك عثرت على حل آخر ، ولكن بالنسبة لمن يبحثون عن هذا السؤال ، يبحثون عن نفس الشيء ، يمكن تحقيقه مع الطلبات على النحو التالي:

أولاً ، كما فعل ماركوس ، تحقق من مصدر نموذج تسجيل الدخول للحصول على ثلاث قطع من المعلومات - عنوان URL الذي يقوم النموذج بنشره ، وسمات الاسم الخاصة بحقول اسم المستخدم وكلمة المرور. في المثال الخاص به ، هم inUserName و inUserPass.

بمجرد حصولك على ذلك ، يمكنك استخدام مثال requests.Session() لعمل طلب نشر على عنوان url لتسجيل الدخول مع تفاصيل تسجيل الدخول الخاصة بك كحمولة. إن تقديم الطلبات من مثيل الجلسة هو في الأساس نفس استخدام الطلبات بشكل طبيعي ، فهو ببساطة يضيف الثبات ، مما يسمح لك بتخزين ملفات تعريف الارتباط واستخدامها وما إلى ذلك.

بافتراض نجاح محاولة تسجيل الدخول الخاصة بك ، يمكنك ببساطة استخدام مثيل الجلسة لتقديم طلبات أخرى إلى الموقع. سيتم استخدام ملف تعريف الارتباط الذي يحدد هويتك للتصريح بالطلبات.

مثال

import requests

# Fill in your details here to be posted to the login form.
payload = {
    'inUserName': 'username',
    'inUserPass': 'password'
}

# Use 'with' to ensure the session context is closed after use.
with requests.Session() as s:
    p = s.post('LOGIN_URL', data=payload)
    # print the html returned or something more intelligent to see if it's a successful login page.
    print p.text

    # An authorised request.
    r = s.get('A protected web page url')
    print r.text
        # etc...

تعرف على اسم المدخلات المستخدمة في نموذج مواقع الويب <...name=username.../> المستخدمين <...name=username.../> وكلمات المرور <...name=password../> في البرنامج النصي أدناه. استبدل أيضًا عنوان url للإشارة إلى الموقع المطلوب لتسجيل الدخول إليه.

login.py

#!/usr/bin/env python

import requests
from requests.packages.urllib3.exceptions import InsecureRequestWarning
requests.packages.urllib3.disable_warnings(InsecureRequestWarning)
payload = { 'username': '[email protected]', 'password': 'blahblahsecretpassw0rd' }
url = 'https://website.com/login.html'
requests.post(url, data=payload, verify=False)

سيؤدي استخدام disable_warnings(InsecureRequestWarning) إلى إسكات أي إخراج من البرنامج النصي عند محاولة تسجيل الدخول إلى مواقع ذات شهادات SSL لم يتم التحقق منها.

إضافي:

لتشغيل هذا البرنامج النصي من سطر الأوامر على نظام UNIX ، ضعه في دليل ، مثل home/scripts وأضف هذا الدليل إلى المسار الخاص بك في ~/.bash_profile أو ملف مشابه يستخدمه الجهاز.

# Custom scripts
export CUSTOM_SCRIPTS=home/scripts
export PATH=$CUSTOM_SCRIPTS:$PATH

ثم قم بإنشاء رابط إلى هذا الثعبان داخل home/scripts/login.py

ln -s ~/home/scipts/login.py ~/home/scipts/login

أغلق الجهاز الخاص بك ، وابدأ محطة جديدة ، وقم login





pyquery