views:

187

answers:

1

Can anyone, please, explain to me what's going on here. It seems that Python refuses to work (with twill) when I am trying to log in to my mailbox on Yahoo:

Python 2.5.4 (r254:67916, Dec 23 2008, 15:10:54) [MSC v.1310 32 bit (Intel)] on win32
Type "copyright", "credits" or "license()" for more information.

    ****************************************************************
    Personal firewall software may warn about the connection IDLE
    makes to its subprocess using this computer's internal loopback
    interface.  This connection is not visible on any external
    interface and no data is sent to or received from the Internet.
    ****************************************************************

IDLE 1.2.4      
>>> import twill
>>> twill.shell.main()

 -= Welcome to twill! =-

current page:  *empty page* 
>> go http://us.yahoo.com
==> at http://us.yahoo.com
current page: http://us.yahoo.com
>> follow Mail
==> at https://login.yahoo.com/config/login_verify2?.intl=us&.src=ym
current page: https://login.yahoo.com/config/login_verify2?.intl=us&.src=ym
>> showforms

Form name=login_form (#1)
## ## __Name__________________ __Type___ __ID________ __Value__________________
1     .tries                   hidden    (None)       1 
2     .src                     hidden    (None)       ym 
3     .md5                     hidden    (None)        
4     .hash                    hidden    (None)        
5     .js                      hidden    (None)        
6     .last                    hidden    (None)        
7     promo                    hidden    (None)        
8     .intl                    hidden    (None)       us 
9     .bypass                  hidden    (None)        
10    .partner                 hidden    (None)        
11    .u                       hidden    (None)       68gre5567rq16 
12    .v                       hidden    (None)       0 
13    .challenge               hidden    (None)       9wKUoOWDdP5Fho0kPfqPKEhPZBdK 
14    .yplus                   hidden    (None)        
15    .emailCode               hidden    (None)        
16    pkg                      hidden    (None)        
17    stepid                   hidden    (None)        
18    .ev                      hidden    (None)        
19    hasMsgr                  hidden    (None)       0 
20    .chkP                    hidden    (None)       Y 
21    .done                    hidden    (None)       http://mail.yahoo.com 
22    .pd                      hidden    (None)       ym_ver=0&c=&ivt=&sg= 
23    pad                      hidden    pad          6 
24    aad                      hidden    aad          6 
25    login                    text      username      
26    passwd                   password  passwd        
27    .persistent              checkbox  persistent   [] of ['y'] 
28 1  .save                    submi ... .save         

current page: https://login.yahoo.com/config/login_verify2?.intl=us&.src=ym
>> fv 1 login *****************
current page: https://login.yahoo.com/config/login_verify2?.intl=us&.src=ym
>> fv 1 passwd ***************
current page: https://login.yahoo.com/config/login_verify2?.intl=us&.src=ym
>> submit
Note: submit is using submit button: name=".save", value=""

Following HTTP-EQUIV=REFRESH to http://us.mg5.mail.yahoo.com/dc/launch?.gx=1&.rand=b3a02cc8lb0aa
current page: http://us.mg5.mail.yahoo.com/dc/launch?.gx=1&.rand=b3a02cc8lb0aa
>> info

Page information:
    URL: http://us.mg5.mail.yahoo.com/dc/launch?.gx=1&.rand=b3a02cc8lb0aa
    HTTP code: 200
    Content type: text/html; charset=utf-8 (HTML)
    Page title: Yahoo! Mail

Traceback (most recent call last):
  File "<pyshell#1>", line 1, in <module>
    twill.shell.main()
  File "C:\Python25\Lib\site-packages\twill\shell.py", line 383, in main
    shell.cmdloop(welcome_msg)
  File "C:\Python25\lib\cmd.py", line 142, in cmdloop
    stop = self.onecmd(line)
  File "C:\Python25\lib\cmd.py", line 219, in onecmd
    return func(arg)
  File "C:\Python25\Lib\site-packages\twill\shell.py", line 42, in do_cmd
    print '\nERROR: %s\n' % (str(e),)
  File "C:\Python25\lib\HTMLParser.py", line 59, in __str__
    result = self.msg
AttributeError: 'ParseError' object has no attribute 'msg'
>>> 

Update 1:

(this update is my answer to Robus)

Hello, Robus!!!

First of all, I assume it was a typo when You wrote:


Here's what I did: Went to C:\Python26\Lib\site-packages\twill-0.9-py2.6.egg\twill\other_packages\


I think You meant this path: "C:\Python26\Lib\site-packages\twill\other_packages". Otherwise, I can't see any such folder/directory there named "twill-0.9-py2.6.egg" - there is only a file with this name (the one that I think was downloaded during the installation of mechanize.) Please tell me if my assumption is wrong - I may well be not seeing something very obvious here as I am just a newbie.

So, following Your instructions, I did this:

  1. I found "C:\Python25\Lib\site-packages\twill\other_packages_mechanize_dist" on my computer (as You can see, I don't have python26, but rather python 25 installed - that might also be a problem)

  2. Changed its name to "_mechanize_dist_backup" (the full path now being "C:\Python25\Lib\site-packages\twill\other_packages_mechanize_dist_backup")

  3. Copied my downloaded and unzipped "mechanize-0.2.2" into "C:\Python25\Lib\site-packages\twill\other_packages" (the full path being "C:\Python25\Lib\site-packages\twill\other_packages\mechanize-0.2.2")

  4. Changed its name to "_mechanize_dist" (the full path being "C:\Python25\Lib\site-packages\twill\other_packages_mechanize_dist")

  5. Copied "ClientForm" file from "_mechanize_dist_backup" and pasted it in "_mechanize_dist" (in fact, I found two files there named "ClientForm": one is a python file, another one is a compiled python file - I copied and pasted both of them).

Having done that, I tried running all those commands and got stuck at the very beginning - I couldn't even import twill now:


IDLE 1.2.4      
>>> import twill

Traceback (most recent call last):
  File "<pyshell#0>", line 1, in <module>
    import twill
  File "C:\Python25\Lib\site-packages\twill\__init__.py", line 52, in <module>
    from shell import TwillCommandLoop
  File "C:\Python25\Lib\site-packages\twill\shell.py", line 9, in <module>
    from twill import commands, parse, __version__
  File "C:\Python25\Lib\site-packages\twill\commands.py", line 7, in <module>
    import _mechanize_dist as mechanize
ImportError: No module named _mechanize_dist

It seems that the system doesn't recognize the newly-created "_mechanize_dist".

Could it be because I have Python 25 instead of Python 26? Or, perhaps, there is some other reason?

+1  A: 

The problem lies in Mechanize. You need the newest version

su
git clone git://github.com/jjlee/mechanize.git
cd mechanize
python setup.py install
Robus
Hello, Robus!!!Thanks for Your answer, but I wasn't using mechanize here, I was just using twill and Python.
brilliant
Twill uses mechanize ;-) Trust me, run these commands and it'll work.
Robus
WOW, Robus, Your words are quite an encouragement for me. Please, tell me, where do I need to run those lines. From command prompt? From Python shell? From twill shell in Python? Do I have to previously download mechanize from its website and unpack it in some special directory on my computer?
brilliant
Assuming you're using linux, command promt (you need superuser privileges). If you're on windows, follow the instructions found here: http://wwwsearch.sourceforge.net/mechanize/download.html
Robus
Thank You very much, Robus!!! (I am sorry I forgot to tell You - I am on Windows.) I will do it tomorrow and let You know about the results right away, need to go now.
brilliant
Hello, Robus!!! Something is wrong. I have downloaded "mechanize-0.2.2.zip" from that site, unpacked it and placed it into my "E:\twill-0.9" directory. Then, using the command prompt, I changed the path from "C" to "E:\twill-0.9\mechanize-0.2.2", typed "python setup.py install" (no quotation marks), and clicked on {Enter}. Installation seemed to succeed - it even firstly downloaded one missing file from http://pypi.python.org/packages (the file is "setuptools-0.6c11-py2.5.egg") - but when I tried using those commands from Python shell, I got (please, see my next comment)
brilliant
I got the same "Traceback" problem right after "Page title: Yahoo! Mail" line. What am I doing wrong here? Did I install "mechanize" correctly? Did I install it in the right place?
brilliant
Apparently twill imports its own mechanize version. Here's what I did: Went to C:\Python26\Lib\site-packages\twill-0.9-py2.6.egg\twill\other_packages\, renamed _mechanize_dist to _mechanize_dist_backup, copied over the mechanize folder from the distribution (mechanize-0.2.2.zip), named it _mechanize_dist and copied ClientForm from _mechanize_dist_backup to _mechanize_dist. Worked for me :)
Robus
Hello, Robus!!! I repeated Your steps, but ran into another problem. Please, refer to the "Update 1" section in the main body of my question to see the details. Thank You.
brilliant
Are you sure you only copied the mechanize dir itself? I.E _mechanize_dist should contain __init__.py, _auth.py, _beautifulsoup.py ETC?
Robus
AAAAAAAAAH! This was my fault, sorry! I just corrected it, tried it again and... BINGO!!! I got logged in!!! Thank You SOOOO MUCH, Robus!!!! Just a small final question, do I still need to run those lines somewhere (sugit clone git://github.com/jjlee/mechanize.gitcd mechanizepython setup.py install) or I can forget about them?
brilliant
AAH! I think You've already answered that question in Your comment - I would've needed to run those lines had I been using Linux, but since I am on Windows I just needed to do what You've shown me. Thanks again!!!
brilliant