Revision: 4327
Author: wikipedian
Date: 2007-09-19 07:31:22 +0000 (Wed, 19 Sep 2007)
Log Message:
-----------
give the bot operator the chance to solve the login CAPTCHA
Modified Paths:
--------------
trunk/pywikipedia/family.py
trunk/pywikipedia/login.py
trunk/pywikipedia/userinterfaces/terminal_interface.py
trunk/pywikipedia/wikipedia.py
Modified: trunk/pywikipedia/family.py
===================================================================
--- trunk/pywikipedia/family.py 2007-09-18 22:24:47 UTC (rev 4326)
+++ trunk/pywikipedia/family.py 2007-09-19 07:31:22 UTC (rev 4327)
@@ -2516,6 +2516,9 @@
def login_address(self, code):
return '%s?title=%s:Userlogin&action=submit' % (self.path(code),
self.special_namespace_url(code))
+ def captcha_image_address(self, code, id):
+ return '%s?title=%s:Captcha/image&wpCaptchaId=%s' % (self.path(code),
self.special_namespace_url(code), id)
+
def watchlist_address(self, code):
return '%s?title=%s:Watchlist/edit' % (self.path(code),
self.special_namespace_url(code))
Modified: trunk/pywikipedia/login.py
===================================================================
--- trunk/pywikipedia/login.py 2007-09-18 22:24:47 UTC (rev 4326)
+++ trunk/pywikipedia/login.py 2007-09-19 07:31:22 UTC (rev 4327)
@@ -96,7 +96,7 @@
# No bot policies on other
return True
- def getCookie(self, remember=True):
+ def getCookie(self, remember=True, captchaId = None, captchaAnswer = None):
"""Login to wikipedia.
remember Remember login (default: True)
@@ -109,6 +109,9 @@
"wpLoginattempt": "Aanmelden & Inschrijven", # dutch
button label seems to work for all wikis
"wpRemember": str(int(bool(remember)))
}
+ if captchaId:
+ predata["wpCaptchaId"] = captchaId
+ predata["wpCaptchaWord"] = captchaAnswer
address = self.site.login_address()
if self.site.hostname() in config.authenticate.keys():
@@ -146,9 +149,15 @@
if len(log_data) == 4:
return "\n".join(L)
+ elif not captchaAnswer:
+ captchaR = re.compile('<input type="hidden"
name="wpCaptchaId" id="wpCaptchaId"
value="(?P<id>\d+)" />')
+ match = captchaR.search(data)
+ if match:
+ id = match.group('id')
+ url = self.site.protocol() + '://' + self.site.hostname() +
self.site.captcha_image_address(id)
+ answer = wikipedia.ui.askForCaptcha(url)
+ return self.getCookie(remember = remember, captchaId = id,
captchaAnswer = answer)
else:
- if '<input type="hidden"
name="wpCaptchaId"' in data:
- wikipedia.output(u'There is a CAPTCHA in the server\'s
response.\nPlease wait a while or log in using a graphical web browser to reset the
request and try again.')
return None
def storecookiedata(self, data):
@@ -218,6 +227,9 @@
else:
return False
+ def showCaptchaWindow(self, url):
+ pass
+
def main():
username = password = None
sysop = False
Modified: trunk/pywikipedia/userinterfaces/terminal_interface.py
===================================================================
--- trunk/pywikipedia/userinterfaces/terminal_interface.py 2007-09-18 22:24:47 UTC (rev
4326)
+++ trunk/pywikipedia/userinterfaces/terminal_interface.py 2007-09-19 07:31:22 UTC (rev
4327)
@@ -1,8 +1,8 @@
-
__version__ = '$Id$'
import config, transliteration
import traceback, re, sys
+import wikipedia
try:
import ctypes
@@ -230,3 +230,12 @@
return text
editor = gui.EditBoxWindow()
return editor.edit(text, jumpIndex = jumpIndex, highlight = highlight)
+
+ def askForCaptcha(self, url):
+ try:
+ import gui
+ # TODO
+ raise ImportError
+ except ImportError, e:
+ return wikipedia.input('What is the solution of the CAPTCHA at %s ?'
% url)
+
Modified: trunk/pywikipedia/wikipedia.py
===================================================================
--- trunk/pywikipedia/wikipedia.py 2007-09-18 22:24:47 UTC (rev 4326)
+++ trunk/pywikipedia/wikipedia.py 2007-09-19 07:31:22 UTC (rev 4327)
@@ -4247,6 +4247,9 @@
def login_address(self):
return self.family.login_address(self.lang)
+ def captcha_image_address(self, id):
+ return self.family.captcha_image_address(self.lang, id)
+
def watchlist_address(self):
return self.family.watchlist_address(self.lang)
Show replies by date