Depuis quelques temps, la recette de calibre pour récupérer et convertir mediapart est cassée. On recevait une jolie trace python:
trace.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
Traceback ( most recent call last ):
File "/Applications/calibre.app/Contents/Resources/Python/lib/python2.7/site.py" , line 147 , in main
return run_entry_point ()
File "/Applications/calibre.app/Contents/Resources/Python/lib/python2.7/site.py" , line 116 , in run_entry_point
return getattr ( pmod , func )()
File "site-packages/calibre/utils/ipc/worker.py" , line 119 , in main
File "site-packages/calibre/gui2/convert/gui_conversion.py" , line 25 , in gui_convert
File "site-packages/calibre/ebooks/conversion/plumber.py" , line 920 , in run
File "site-packages/calibre/customize/conversion.py" , line 204 , in __call__
File "site-packages/calibre/web/feeds/input.py" , line 101 , in convert
File "site-packages/calibre/web/feeds/news.py" , line 632 , in __init__
File "/var/folders/0z/0zkMgRtCGm8ofh4LX0jh0U+++TM/-Tmp-/calibre_0.8.0_tmp_IwF6Co/calibre_0.8.0_aTb7l5_recipes/recipe0.py" , line 78 , in get_browser
br [ 'name' ] = self . username
File "site-packages/mechanize/_form.py" , line 2780 , in __setitem__
File "site-packages/mechanize/_form.py" , line 3101 , in find_control
File "site-packages/mechanize/_form.py" , line 3185 , in _find_control
mechanize . _form . ControlNotFoundError : no control matching name 'name'
Pour la corriger, il suffit de changer cette méthode de la recette qui récupère les news:
mediapart.py
1
2
3
4
5
6
7
8
9
def get_browser ( self ):
br = BasicNewsRecipe . get_browser ()
if self . username is not None and self . password is not None :
br . open ( 'http://www.mediapart.fr/' )
br . select_form ( nr = 1 )
br [ 'name' ] = self . username
br [ 'pass' ] = self . password
br . submit ()
return br
et de remplacer br.select_form(nr=1)
par br.select_form(nr=0)
Je cherche comment adresser un élément form par son id avec mechanize (il a id=‘user-input-form’ comme attribut), parce que c’est quand même royalement pénible de se baser sur le fait que la home page de mediapart présente son formulaire de login en premier (ou en deuxième dans ce cas particulier)
nb: ça fait 15 ans que j’ai écrit ma dernière ligne de python. Si si :-)