Sockets, TCP/IP, (XML-)RPC und ähnliche Themen gehören in dieses Forum
Satzende
User
Beiträge: 70 Registriert: Samstag 8. Januar 2011, 12:41
Donnerstag 21. Juli 2011, 13:56
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
Donnerstag 21. Juli 2011, 14:05
@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
Donnerstag 21. Juli 2011, 14:42
wenn ich variable.click_link() versuche geht es aber woher weis er den welchen ich meine.
Die Methode übernimmt keine Argumente. :K
BlackJack
Donnerstag 21. Juli 2011, 15:37
@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
Donnerstag 21. Juli 2011, 15:42
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
Donnerstag 21. Juli 2011, 18:01
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.
BlackJack
Samstag 23. Juli 2011, 09:25
@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
Samstag 23. Juli 2011, 10:11
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
Samstag 23. Juli 2011, 14:20
@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.