كيفية تسجيل الدخول إلى موقع ويب باستخدام Twill المثبت؟
سؤال
لقد قمت بتثبيت فقط بنجاح نسيج قطني طويل على جهاز الكمبيوتر الخاص بي بمساعدة عضو واحد داعم للغاية في "Stackoverflow" (يمكنك التحقق من ذلك هنا) وحاولت تشغيل أحد الأمثلة البسيطة على صفحة توثيق Twill (يمكنك رؤية تلك الصفحة هنا). هذا هو المثال:
(مصدر: narod.ru)
دعنا نقول اسم المستخدم الخاص بي www.slash.org هو Lynxye وكلمة المرور الخاصة بي هي الحيوان الثديي. عندما أحاول إدخال رمز المثال في موجه Python الخاص بي ، يمكنني فقط الكتابة وإدخال السطر الأول من الرمز لأنه عند النقر فوق "إدخال" لبدء سطر جديد ، أحصل على بعض رسائل الخطأ على الفور:
(مصدر: narod.ru)
يحدث الشيء نفسه عندما أحاول إدخال هذا الرمز في المحطة الخاصة بي:
(مصدر: narod.ru)
أعتقد أنني أفتقد بعض الأساسيات هنا. ربما ، أحتاج إلى إنشاء ملف يحتوي على هذا الرمز ثم تشغيل هذا الملف بطريقة أو بأخرى ، لكنني لا أعرف حقًا أين أحتاج إلى إنشاء هذا الملف ومع أي extensdion.
هل يمكن لأي شخص ، من فضلك ، مساعدتي في هذا؟
المحلول
تحتاج إلى تشغيل تلك الأوامر داخل Twill Shell ، بدلاً من Python Shell
D:\tmp\twill-0.9>بيثون تلي
-= Welcome to twill! =-
current page: *empty page*
>>
يمكنك وضع أوامر Twill عندما ترى >>
أو يوجد خطان فقط في ملف Twill-Sh
import twill.shell
twill.shell.main()
يمكنك فقط نسخ لصق ذلك خطين إلى مطالبة بيثون.
>>> استيراد twill.shell
>>> twill.shell.main ()
-= Welcome to twill! =-
current page: *empty page*
>> ?
Undocumented commands:
======================
add_auth fa info save_html title
add_extra_header find load_cookies setglobal url
agent follow notfind setlocal
back formaction redirect_error show
clear_cookies formclear redirect_output show_cookies
clear_extra_headers formfile reload show_extra_headers
code formvalue reset_browser showforms
config fv reset_error showhistory
debug get_browser reset_output showlinks
echo getinput run sleep
exit getpassword runfile submit
extend_with go save_cookies tidy_ok
current page: *empty page*
>>
نصائح أخرى
هذا سيفعل ذلك:
>>> import twill.commands
>>> import re
>>>
>>> class browser:
... def __init__(self, url="http://www.slashdot.org"):
... self.a=twill.commands
... self.a.config("readonly_controls_writeable", 1)
... self.b = self.a.get_browser()
... self.b.set_agent_string("Mozilla/5.0 (Windows; U; Windows NT 5.1; en-GB; rv:1.8.1.14) Gecko/20080404 Firefox/2.0.0.14")
... self.b.clear_cookies()
... self.url=url
... def slashdot(self, loginName, passwd):
... self.b.go(self.url)
... f = self.b.get_form("1")
... regexp = re.compile("Log In")
... link = self.b.find_link(regexp)
... if link:
... self.b.follow_link(link)
... f=self.b.get_form("2")
... f["unickname"] = loginName
... f["upasswd"] = passwd
... self.a.fv("2", "userlogin", "")
...
>>>
>>> t=browser()
>>> t.slashdot("username", "password")
==> at http://slashdot.org/
==> at http://slashdot.org/my/login
forcing read-only form field to writeable
>>>
من الأسهل أيضًا إذا كنت تستخدم BeautifulSoup لتحليل HTML
لا يُقصد من أقواس الزاوية أن يتم إدخالها حرفيًا ؛ إنهم فقط هناك للإشارة إلى أنه يجب عليك إدخال قيمة. محاولة
setlocal username lynxye
في حين أن.
هذه ليست الطريقة للاستخدام في المطالبة.
تحتاج إلى إرفاق زوج القيمة الرئيسية بين قوسين. يحب،
setlocal ('uname' ، 'xyz')
setlocal ('كلمة المرور' ، '123')
يذهب('http://abc.org')
FV ('1' ، 'Foo' ، 'Bar')