سؤال

هل هذا السيناريو بيثون صحيح؟


import urllib, urllib2, cookielib 

username = 'myuser' 
password = 'mypassword' 

cj = cookielib.CookieJar() 
opener = urllib2.build_opener(urllib2.HTTPCookieProcessor(cj)) 
login_data = urllib.urlencode({'username' : username, 'j_password' : password}) 
opener.open('http://www.example.com/login.php', login_data) 
resp = opener.open('http://www.example.com/hiddenpage.php') 
resp.read()

لقد وجدت هذا السيناريو هنايهدف إلى تسجيل الدخول إلى صفحة ويب أولاً ، واسترداد ملفات تعريف الارتباط ، وتخزينها واستخدامها من أجل فتح بعض الصفحات الأخرى في نفس الموقع. أريد تسجيل الدخول بهذه الطريقة إلى حساب eBay الخاص بي (عنوان URL هو https://signin.ebay.com/ws/ebayisapi.dll؟signin ) ثم انتقل إلى صندوق الوارد الخاص بي على حساب eBay الخاص بي (عنوان URL http://my.ebay.com/ws/ebayisapi.dll؟myebay&gbh=1) .

لذا ، إليك القيم التي أحتاج إلى استخدامها في هذا البرنامج النصي:

أول عنوان URL (الغناء): https://signin.ebay.com/ws/ebayisapi.dll؟signin

عنوان URL الثاني: http://my.ebay.com/ws/ebayisapi.dll؟myebay&gbh=1

اسم تسجيل الدخول الخاص بي على موقع eBay: tryinghard

كلمة المرور الخاصة بي على موقع eBay: gettingsomewhere

مع كل هذه القيم الجديدة ، يجب أن يبدو البرنامج النصي أعلاه بهذه الطريقة:


import urllib, urllib2, cookielib 

username = 'tryinghard' 
password = 'gettingsomewhere' 

cj = cookielib.CookieJar() 
opener = urllib2.build_opener(urllib2.HTTPCookieProcessor(cj)) 
login_data = urllib.urlencode({'username' : username, 'j_password' : password}) 
opener.open(https://signin.ebay.com/ws/eBayISAPI.dll?SignIn', login_data) 
resp = opener.open(http://my.ebay.com/ws/eBayISAPI.dll?MyEbay&gbh=1') 
resp.read()

هل هذا صحيح؟ أنا متشكك بشكل خاص في login_data = الخط (الرابع من أسفل) ، لماذا هو أ j_password هناك بدلا من فقط password?

جربت هذا البرنامج النصي بكل هذه القيم ولم ينجح. هل يعرف أي شخص لماذا لا يعمل في حالتي؟

لقد قمت بالفعل تعلمت كيفية تسجيل الدخول إلى حساب eBay الخاص بي ثم تحقق من بعض الصفحات الأخرى هناك عن طريق تشغيل برنامج نصي Python الذي يستخدم Twill كوحدة خارجية, ، لكن ذلك كان ناجحًا فقط عندما قمت بتشغيل هذا البرنامج النصي من موجه الأوامر أو من قذيفة Python. لم يكن ناجحًا عندما حاولت تشغيل هذا البرنامج النصي عن طريق "طقم تطوير برامج محرك تطبيقات Google" التي قمت بتنزيلها من "محرك تطبيقات جوجل".

في وقت لاحق قيل لي هنا لم يكن ناجحًا لأن "محرك تطبيق Google" لا يحب الوحدات الخارجية. لهذا السبب وجدت هذا البرنامج النصي - تلك الوحدات التي تستوردها في البداية (urllib, urllib2, cookielib) كلها وحدات مدمجة.

هل كانت مفيدة؟

المحلول

"مصدر عرض" بسيط على صفحة تسجيل الدخول التي تعطيها عن عنوان URL الذي تعطيه يكشف بسهولة بالتفاصيل التالية حول هذا الموضوع ... (فقط تنسيق HTML الحد الأدنى لقدرة على القراءة):

<span style="display:-moz-inline-stack" class="unl">
  <label for="userid">User ID  </label></span>
<span><input size="27" maxlength="64" class="txtBxF"
       value="" name="userid" id="userid"></span></div>
<div><span style="display:-moz-inline-stack" class="unl">
  <label for="pass">Password  </label></span>
<span><input size="27" maxlength="64" class="txtBxF"
       value="" name="pass" id="pass" type="password"></span>

كما ترون في لمحة ، فإن أسماء حقول الإدخال الحاسمة ليس username و j_password وأنت تستخدم ، ولكن بالأحرى userid و pass. لذلك من الواضح أنه من المستحيل على الكود الخاص بك العمل كما هو الحال حاليًا.

اقرأ أكثر قليلاً من الصفحة وسترى أيضًا بعد فترة وجيزة:

<input type="checkbox" name="keepMeSignInOption" value="1" id="signed_in"></b>
<span class="pcsm"><label for="signed_in"><b>Keep me signed in for today.</b>

على الأرجح ، سيتعين عليك محاكاة خانة الاختيار التي يتم اختيارها للحصول على ملفات تعريف الارتباط قابلة للاستخدام (على الأقل لأي شيء سوى وقت سريع ؛-).

وما إلى ذلك ، وما إلى ذلك ، حقًا - محاولة أتمتة التفاعل مع صفحة دون عناء قراءة مصدر تلك الصفحة للحصول على المعرفات والأسماء الفعلية لاستخدامها في إضرابني باعتبارها بالتأكيد عرضًا متفائلًا للغاية تجاه الحياة ، والكون ، وكل شيء...؛-). بالمناسبة ، لتبسيط هذا التفاعل (بعد، بعدما الاطلاع على المصدر ؛-) ، لقد وجدت ميكانيكي مفيد للغاية (وأكثر قوة من محاولة اختراقها فقط مع المكتبة القياسية ، كما تفعل).

أيضًا ، قبل التفاعل التلقائي مع موقع ما ، تحقق دائمًا من robots.txt للتأكد من عدم كسر شروط استخدامها - يمكن للمواقع بسهولة تحديد "الروبوتات" (التفاعل الآلي) بدلاً من "البشر" ، والانتقام من انتهاك Robots.txt من خلال حظر القائمة السوداء ، والأسوأ ؛ أنت لا تريد حقًا أن تصادف ذلك ؛-).

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top