Mechanize Button clicken ?

Sockets, TCP/IP, (XML-)RPC und ähnliche Themen gehören in dieses Forum
Antworten
Satzende
User
Beiträge: 70
Registriert: Samstag 8. Januar 2011, 12:41

Hallo

ich versuche da auf einen Button klicken zu lassen aber ich befreife nicht wie das gehen soll.

Code: Alles auswählen

t = mechanize.Browser(factory = mechanize.RobustFactory());
t.set_handle_robots(False);
t.open(seite_1);
#-------------------erstes feld // email
t.select_form(nr=0);
t.form["email"] = mail;
#-------------------zweites feld // pw
t.form["pass"] = pw;
#-------absenden
t.submit()

t.click("Startseite")

bekomme dann immer die Fehlermeldung:
request = self.form.click(*args, **kwds)
AttributeError: 'NoneType' object has no attribute 'click'


der Button :

Code: Alles auswählen

<li id="navHome">
<a class="topNavLink" accesskey="1" href="http://www.facebook.com/?ref=home">Startseite</a>
</li>
BlackJack

@Satzende: Du verwendest die falsche Methode. Die zum ”Anklicken” von Links heisst anders als die um Buttons in einem Form anzuklicken.
Satzende
User
Beiträge: 70
Registriert: Samstag 8. Januar 2011, 12:41

wenn ich variable.click_link() versuche geht es aber woher weis er den welchen ich meine.
Die Methode übernimmt keine Argumente. :K
BlackJack

@Satzende: Doch die übernimmt Argumente. Wobei ich jetzt nicht so recht weiss ob Du die auf dem richtigen Objekt aufrufst, denn `variable` kommt in Deinem Beispiel weiter oben nirgends vor. Ich meinte die auf `Browser`-Exemplaren.
Satzende
User
Beiträge: 70
Registriert: Samstag 8. Januar 2011, 12:41

ich meine damit t.click_link.
"t" ist doch ein Objekt der klasse Browser oder ?

Code: Alles auswählen

t = mechanize.Browser(factory = mechanize.RobustFactory());
p.s. Ich finde im Internet nur die Dokumentation zu der Ruby Libery
BlackJack

Ich habe mir die Objekte "live" angeschaut:

Code: Alles auswählen

In [52]: mechanize.Browser.click_link?
Type:           instancemethod
Base Class:     <type 'instancemethod'>
String Form:    <unbound method Browser.click_link>
Namespace:      Interactive
File:           /usr/lib/python2.6/dist-packages/mechanize/_mechanize.py
Definition:     mechanize.Browser.click_link(self, link=None, **kwds)
Docstring:
    Find a link and return a Request object for it.                             
    
    Arguments are as for .find_link(), except that a link may be supplied
    as the first argument.
Satzende
User
Beiträge: 70
Registriert: Samstag 8. Januar 2011, 12:41

Bin immer noch nicht schlauer, mag mir wer einen schubs geben ?
BlackJack

@Satzende: In der Doku zu `click_link()` steht, dass die gleichen Argumente wie `find_link()` entgegen genommen werden. Und in der Doku zu `find_link()` steht, welche das sind.
Satzende
User
Beiträge: 70
Registriert: Samstag 8. Januar 2011, 12:41

Meine Güte das wahr nun aber eine Geburt.

Code: Alles auswählen

# -*- coding: UTF-8 -*-
import mechanize 

url_g = "http://www.google.ch"
a = mechanize.Browser()
a.open(url_g)


#links in datei sammeln
t = list(a.links())
xx = open("links_3.txt","w")
zehler = 0;


for i in t:
    xx.write(str(t[zehler])+"\n");
    zehler += 1;
xx.close();

#startseite schreiben    
s1 = open("seite_1.html","w");
s1.write(a.response().read());
s1.close();

#link suchen und anklicken
a.find_link(url= "http://www.google.ch/imghp?hl=de&tab=wi")
#a.click_link(url= "http://www.google.ch/imghp?hl=de&tab=wi")
a.follow_link(url= "http://www.google.ch/imghp?hl=de&tab=wi")


#neue siete schreiben
s2 = open("seite_2.html","w");
s2.write(a.response().read());
s2.close();

was ich nun noch nicht verstehe ist das #a.click_link(url= "http://www.google.ch/imghp?hl=de&tab=wi")
nichts gebracht hat.

Danke für deine hilfe BlackJack
BlackJack

@Satzende: Das hat schon was gebracht, Du machst nur nichts mit dem Rückgabewert. Genau wie das `find_link()` so wie es da steht unsinnig ist.
Antworten