كيف تجمع بين Twill و Python في رمز واحد يمكن تشغيله على "Google App Engine"؟

StackOverflow https://stackoverflow.com/questions/2717325

سؤال

لقد قمت بتثبيت Twill على جهاز الكمبيوتر الخاص بي (بعد أن قمت بتثبيت Python 2.5 سابقًا) وكنت أستخدمه مؤخرًا.

تم تثبيت Python على القرص C على جهاز الكمبيوتر الخاص بي: C: Python25

يقع المجلد Twill ("Twill-0.9") هنا: E: tmp Twill-0.9

فيما يلي رمز كنت أستخدمه في Twill:

go “some website’s sign-in page URL”
formvalue 2 userid “my login”
formvalue 2 pass “my password”
submit
go “URL of some other page from that website”
save_html result.txt

يساعدني هذا الرمز على تسجيل الدخول إلى موقع ويب واحد ، والذي لدي حساب فيه ، وتسجيل رمز HTML لبعض الصفحات الأخرى من هذا الموقع (الذي لا يمكنني الوصول إليه إلا بعد تسجيل الدخول) ، وتخزينه في ملف يسمى "نتيجة". txt "(بالطبع ، قبل استخدام هذا الرمز ، أحتاج أولاً إلى استبدال" تسجيل الدخول الخاص بي "بتسجيل الدخول الحقيقي ،" كلمة المرور الخاصة بي "بكلمة مرور حقيقية ،" عنوان URL لتوقيع موقع الويب "و" عنوان URL لبعض الصفحات الأخرى من هذا الموقع "مع عناوين URL الحقيقية لهذا الموقع ، والرقم 2 مع عدد النموذج على هذا الموقع الذي يتم استخدامه كنموذج تسجيل الدخول على صفحة تسجيل الدخول لهذا الموقع)

هذا الرمز الذي أقوم بتخزينه في ملف "test.twill" الموجود في مجلد "Twill-0.9": E: tmp twill-0.9 test.twill أقوم بتشغيل هذا الملف من موجه الأوامر: اختبار Python Twill-sh. نسيج قطني طويل

الآن ، قمت أيضًا بتثبيت "Google App Engine SDK" من "Google App Engine" وقد استخدمته أيضًا لفترة.

على سبيل المثال ، كنت أستخدم هذا الرمز:

import hashlib
m = hashlib.md5()
m.update("Nobody inspects")
m.update(" the spammish repetition ")
print m.hexdigest()

يساعدني هذا الرمز في تحويل عبارة "لا أحد يتفقد تكرار spammish" إلى MD5 Digest.

الآن ، كيف يمكنني وضع هاتين القطعتين من الكود معًا في نص واحد للثعبان يمكنني تشغيله على "Google App Engine"؟

دعنا نقول ، أريد أن يقوم الكود الخاص بي بتسجيل الدخول إلى موقع ويب من "Google App Engine" ، انتقل إلى صفحة أخرى على هذا الموقع ، وتسجيل رمز HTML (هذا ما يفعله رمز Twill الخاص بي) ومن تحويل رمز HTML هذا إلى MD5 Digest الخاص به (هذا ما يفعله رمزتي الثانية). لذا ، كيف يمكنني الجمع بين هذين الرموز في رمز ثعبان واحد؟

أعتقد أنه يجب أن يتم ذلك بطريقة أو بأخرى عن طريق استيراد Twill ، ولكن كيف يمكن القيام بذلك؟ هل يمكن لرمز Python - الذي يتم تشغيله بواسطة "Google App Engine" - استيراد Twill من مكان ما على الإنترنت؟ أو ، ربما ، تم تثبيت Twill بالفعل على "Google App Engine"؟


تحديث 1:

(هذا التحديث هو ردي على إجابة ووبل)

فيما يلي قائمة بجميع المجلدات (في مجلد "Twill-0.9") الذي يحتوي على __initملفات __.py. (توجد بعض المجلدات الموجودة في هذه القائمة داخل مجلدات أخرى ، والتي تم ذكرها أيضًا في هذه القائمة):

E: twill-0.9 build lib twill stensions match_parse

E: twill-0.9 build lib twill extensions

E: twill-0.9 build lib twill other_packages _mechanize_dist

E: twill-0.9 build lib twill other_packages

E: twill-0.9 build lib twill

E: twill-0.9 twill extensions match_parse

E: twill-0.9 twill extensions

E: twill-0.9 twill other_packages _mechanize_dist

E: twill-0.9 twill other_packages

E: twill-0.9 twill

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

المحلول

لاستخدام مكتبات الطرف الثالث في مشاريع محرك التطبيقات ، عليك ببساطة تضمينها مع تطبيقك عند النشر. انسخ مجلد Twill (واحد يحتوي __init__.py) في مجلد التطبيق الخاص بك ونشره.

بالنظر إلى مشروع Twill Google Code ، يبدو أن Twill يتضمن تبعياته (Pyparsing ، Mechanize ، وما إلى ذلك) في الحزمة ، لذلك قد لا تحتاج إلى تضمين أي شيء آخر.

نصائح أخرى

فيما يلي مثال على استخدام Twill لتشغيل بحث Google إذا كان هذا يساعد. يظهر باستخدام Twill و BeautifulSoup معًا لتحليل صفحات الويب:

>>> import twill.commands
>>> import BeautifulSoup
>>> 
>>> class browser:
...    def __init__(self, url="http://www.google.com",log = None):
...       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.log = log
...       self.b.clear_cookies()
...       self.url=url
...    def googleQuery(self, query="python code"):
...       self.b.go(self.url)
...       #self.b.showforms()
...       f = self.b.get_form("f")
...       #print "form is %s" % f
...       f["q"] = query
...       self.b.clicked(f, "btnG")
...       self.b.submit()
...       pageContent = self.b.get_html()
...       soup=BeautifulSoup.BeautifulSoup(pageContent)
...       ths = soup.findAll(attrs={"class" : "l"})
...       for a in ths:
...          print a
... 
>>> t=browser()
>>> t.googleQuery("twill queries")
==> at http://www.google.ie/
Note: submit is using submit button: name="btnG", value="Google Search"

<a href="http://pyparsing.wikispaces.com/WhosUsingPyparsing" class="l" onmousedown="return clk(this.href,'','','res','1','','0CBMQFjAA')">pyparsing - WhosUsingPyparsing</a>
<a href="http://www.mail-archive.com/twill@lists.idyll.org/msg00048.html" class="l" onmousedown="return clk(this.href,'','','res','2','','0CBcQFjAB')">Re: [<em>twill</em>] <em>query</em>: docs, and web site.</a>
<a href="http://www.mail-archive.com/twill@lists.idyll.org/msg00050.html" class="l" onmousedown="return clk(this.href,'','','res','3','','0CBkQFjAC')">Re: [<em>twill</em>] <em>query</em>: docs, and web site.</a>
<a href="http://www.genealogytoday.com/surname/finder.mv?Surname=Twill" class="l" onmousedown="return clk(this.href,'','','res','4','','0CB4QFjAD')"><em>Twill</em> Genealogy and Family Tree Resources - Surname Finder</a>
<a href="http://a706cheap-apparel.hobby-site.com/ladies-cotton-faded-twill-le-chameau-breeks-42" class="l" onmousedown="return clk(this.href,'','','res','5','','0CCEQFjAE')">Ladies Cotton Faded <em>Twill</em> Le Chameau Breeks 42</a>
<a href="http://twill.idyll.org/examples.html" class="l" onmousedown="return clk(this.href,'','','res','6','','0CCMQFjAF')"><em>twill</em> Examples</a>
<a href="http://panjiva.com/Sri-Lankan-Manufacturers-Of/twill+capri" class="l" onmousedown="return clk(this.href,'','','res','7','','0CCcQFjAG')">Sri-Lankan <em>Twill</em> Capri Manufacturers | Sri-Lankan Suppliers of <b>...</b></a>
<a href="http://c586cheap-apparel.dyndns.ws/twill-beige-blazer" class="l" onmousedown="return clk(this.href,'','','res','8','','0CCoQFjAH')"><em>Twill</em> beige blazer</a>
<a href="http://stackoverflow.com/questions/2267537/how-do-you-use-relative-paths-for-twill-tests" class="l" onmousedown="return clk(this.href,'','','res','9','','0CCwQFjAI')">How do you use Relative Paths for <em>Twill</em> tests? - Stack Overflow</a>
<a href="http://mytextilenotes.blogspot.com/2010/01/introduction-to-twill-weave.html" class="l" onmousedown="return clk(this.href,'','','res','10','','0CC8QFjAJ')">My Textile Notes: Introduction to <em>Twill</em> Weave</a>
>>>  

لا فكرة عما يفعله Twill (حسنًا ، Googled) ، لكن Appengine تقدم fetch() وظيفة والتي يمكن استخدامها لجلب صفحات الويب. كما يدعم طريقة ما بعد على سبيل المثال لتسجيلات تسجيل الدخول.

(أشك في أن Twill يعمل في AppEngine ، لأن Appengine لديها مكتبات Python محدودة متاحة لأسباب أمنية. مجرد تخمين.)

أعتقد أنك تبحث عن وسيلة لاستيراد وحدة Twill في محرك التطبيق. سيتعين عليك معرفة إما في مكان وجود ملفات Python Twill أو كيفية الحصول على حزمة مصدر منها لتعبئتها باستخدام موقع الويب الخاص بك ، ولكن يبدو أن استيراد وحدات الطرف الثالث يمكن القيام به مع استثناءات قليلة ، انظر أدناه.

محاولة Zipimport بعد الإرشادات من موقع Google هنا و هنا.

من صفحة مكتبة الطرف الثالث من Google:

يستخدم App Engine إصدارًا مخصصًا من ميزة Zipimport بدلاً من التنفيذ القياسي. يعمل بشكل عام على الطريقة المعتادة: أضف أرشيف الرمز البريدي إلى Sys.Path ، ثم استيراد كالمعتاد. مع هذه الاستثناءات: يمكن لـ Zipimport استيراد الوحدات النمطية المخزنة فقط في أرشيف ملفات مصدر .py. لا يمكن استيراد الوحدات النمطية المخزنة كملفات .pyc أو .pyo. يتم تنفيذ Zipimport في Python Pure ، ولا يستخدم التعليمات البرمجية الأصلية لإلغاء الضغط (رمز C).

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