الطريقة المناسبة للسيناريو لسحب صفحة بشكل دوري من موقع HTTPS
سؤال
أرغب في إنشاء برنامج نصي لخط الأوامر لـ Cygwin/Bash الذي يسجل الدخول إلى موقع ما ، ويتنقل إلى صفحة معينة ويقارنه بنتائج التشغيل الأخير. حتى الآن ، لقد عملت مع الوشق مثل ذلك:
----snpipped, just setting variables----
echo "# Command logfile created by Lynx 2.8.5rel.5 (29 Oct 2005)
----snipped the recorded keystrokes-------
key Right Arrow
key p
key Right Arrow
key ^U" >> $tmp1 #p, right arrow initiate the page saving
#"type" the filename inside the "where to save" dialog
for i in $(seq 0 $((${#tmp2} - 1)))
do
echo "key ${tmp2:$i:1}" >> $tmp1
done
#hit enter and quit
echo "key ^J
key y
key q
key y
" >> $tmp1
lynx -accept_all_cookies -cmd_script=$tmp1 https://thewebpage.com/login
diff $tmp2 $oldComp
mv $tmp2 $oldComp
من المؤكد أنه لا يشعر "صحيح": يتكون CMD_Script من إجراءات المستخدم النسبية بدلاً من تحديد أسماء الرابطات والإجراءات الدقيقة. لذلك ، إذا تغير أي شيء على الموقع على الإطلاق ، يتم تبديل الأماكن ، أو تمت إضافة رابط جديد - سيتعين علي إعادة إنشاء الإجراءات.
أيضًا ، لا يمكنني التحقق من أي أخطاء حتى لا أستطيع إحباط البرنامج النصي إذا حدث خطأ ما (فشل تسجيل الدخول ، إلخ)
بديل آخر كنت أنظر إليه هو ميكانيكي مع روبي (كملاحظة - لدي 0 تجربة مع روبي).
ما هي أفضل طريقة لتحسين أو إعادة كتابة هذا؟
المحلول
أعتقد أن Lynx أداة رائعة لمهام أتمتة الويب البسيطة ، ولكن بالطبع لها حدودها. إذا كنت بحاجة إلى التحقق من الخطأ ، فيجب عليك استخدام إحدى الوحدات الميكانيكية لـ Perl أو Python أو Ruby (إذا كنت لا تعرف أيًا من هذه اللغات ، فقد يكون Python الأسهل للتعلم).
لجعل البرنامج النصي Lynx أكثر قوة قليلاً ، يمكنك استخدام وظيفة البحث لتحديد الروابط. في بعض الصفحات باستخدام قائمة الارتباطات (L) يمكن أن تساعد.
في النهاية ، سأضيف بعض اختبارات العقل لمعرفة ما إذا كانت الملفات التي تم تنزيلها هي حقًا تلك التي تريدها.
نصائح أخرى
استطاع wget
كن مفيدًا هنا؟
إنه أداة سطر الأوامر HTTP و HTTPS و FTD. إنه برنامج مجاني (GNU). يحتوي على العديد من الخيارات مثل المصادقة والجدول الزمني (فقط قم بتنزيل ملف إذا تغير منذ آخر مرة).