Seite 1 von 2

Mechanize Checkboxen

Verfasst: Montag 26. Juni 2017, 18:37
von phoenixx592
Guten Tag da bin ich wieder,
Kurze Frage zur erläuterung wieso dieses Skript wieder nicht funktioniert. Da ich das Googleskript verstanden habe wollte ich eine Stufe höher steigen mit Mechanize. Das skript soll nun auf die seite http://www.proxy-liste.de gehen und mir die Proxys ausgeben.

Funktioniert mal wieder garnichts.

Code: Alles auswählen

import mechanize	#importiere das Modul

br = mechanize.Browser()	#Rufe den Browser auf
br.set_handle_robots(False)
br.addheaders = [('User-agent', 'Mozilla/5.0')]	#Stelle die Headers auf Firefox
br.open('http://www.proxy-listen.de/Proxy/Proxyliste.html') 	#öffne die Seite
br.select_form(nr=0)		# selectiere die erste Form
br.find_control("filter_response_time_http").items[3].selected=True 	# finde die checkbox "filter_response_time_http" setzte das Item auf nummer "3" 
br.submit()	#bestätige
print(br.getcode())	# gebe mir den vollen HTML CODE aus

print("finish")

Re: Mechanize Checkboxen

Verfasst: Montag 26. Juni 2017, 20:09
von BlackJack
@phoenixx592: „Funktioniert mal wieder garnichts.“ ist keine sinnvolle Fehlerbeschreibung. Was *genau* funktioniert denn nicht? Gibt es eine Ausnahme? Dann bitte verraten welche und am besten den kompletten Traceback 1:1 kopieren. Oder verhält sich das nicht wie erwartet? Dann bitte verraten wie es sich verhält und wie das von den Erwartungen abweicht.

Re: Mechanize Checkboxen

Verfasst: Montag 26. Juni 2017, 20:15
von phoenixx592

Code: Alles auswählen

Traceback (most recent call last):
  File "C:/Users/Admin/PycharmProjects/Maker/Proxy_choose.py", line 10, in <module>
    print(br.getcode())
  File "C:\Python27\lib\site-packages\mechanize\_mechanize.py", line 628, in __getattr__
    ".select_form()?)" % (self.__class__, name))
AttributeError: mechanize._mechanize.Browser instance has no attribute getcode (perhaps you forgot to .select_form()?)

Re: Mechanize Checkboxen

Verfasst: Montag 26. Juni 2017, 20:33
von BlackJack
@phoenixx592: So ein `Browser` hat ja auch keine `getcode()`-Methode. Du möchtest das `Response`-Objekt vom `Browser` holen und darauf dann beispielsweise `get_data()` aufrufen.

Re: Mechanize Checkboxen

Verfasst: Montag 26. Juni 2017, 21:39
von phoenixx592
Leichter gesagt als getan....

Code: Alles auswählen

import mechanize

br = mechanize.Browser()
br.set_handle_robots(False)
br.addheaders = [('User-agent', 'Mozilla/5.0')]
br.open('http://www.proxy-listen.de/Proxy/Proxyliste.html')
br.select_form(nr=0)
br.find_control("filter_response_time_http").items[3].selected=True
br.submit()
br.response
print(br.get_data())

print("finish")

File "C:/Users/Admin/PycharmProjects/MoneyMaker/Proxy_choose.py", line 11, in <module>
print(br.get_data())
File "C:\Python27\lib\site-packages\mechanize\_mechanize.py", line 628, in __getattr__
".select_form()?)" % (self.__class__, name))
AttributeError: mechanize._mechanize.Browser instance has no attribute get_data (perhaps you forgot to .select_form()?)

Re: Mechanize Checkboxen

Verfasst: Montag 26. Juni 2017, 22:00
von BlackJack
@phoenixx592: `br` hat natürlich auch keine `get_data()`-Methode. Wie kommst Du auf diese Ideen? Die `response()`-Methode musst Du *aufrufen* und die gibt ein `Response()`-Objekt als *Rückgabewert*. Wobei man das auch von der `submit()`-Methode auch schon bekommt.

Re: Mechanize Checkboxen

Verfasst: Montag 26. Juni 2017, 22:00
von __deets__
Du musst response schon aufrufen - das machen die () dahinter.... - und den Rueckgabewert auch benutzen, um darauf get_data() aufzurufen.

Re: Mechanize Checkboxen

Verfasst: Montag 26. Juni 2017, 22:19
von phoenixx592
Okay bin ich auch drauf gekommen :lol:

funktioniert jetzt alles soweit, bis auf das er mir die seite http://www.proxy-liste.de auswertet anstatt die http://www.proxy-listen.de/Proxy/Proxyliste.html

Code: Alles auswählen

import mechanize

br = mechanize.Browser()
br.set_handle_robots(False)
br.addheaders = [('User-agent', 'Mozilla/5.0')]
br.open("http://www.proxy-listen.de/Proxy/Proxyliste.html")
br.select_form(nr=0)
br.form['filter_response_time_http'] = ["3"]
br.form['filter_timeouts1'] = ["0"]
br.submit()
html = br.response().readlines()
print(html)

print("finish")

Re: Mechanize Checkboxen

Verfasst: Montag 26. Juni 2017, 22:22
von phoenixx592
ich denke mal ich hab da was mit dem submit falsch beschieben gibt es denn keine option wo man auf eine id clicken kann?

funktion br.click() vll?

Re: Mechanize Checkboxen

Verfasst: Montag 26. Juni 2017, 23:13
von phoenixx592
Okay also,
kurze Zusammenfassung 8)

Code: Alles auswählen

import mechanize

br = mechanize.Browser()
br.set_handle_robots(False)
br.addheaders = [('User-agent', 'Mozilla/5.0')]
br.open("http://www.proxy-listen.de/Proxy/Proxyliste.html")
br.select_form(nr=0)
br.form['filter_response_time_http'] = ["3"]
br.form['filter_timeouts1'] = ["0"]
br.form.find_control("liststyle").get("leech").selected = True		# Checkbox auf True setzen
br.submit(name="submit", nr=0, id="submit")
html = br.response().readlines()
print(html)

print("finish")
Traceback (most recent call last):
File "C:/Users/Admin/PycharmProjects/Maker/Proxy_choose.py", line 10, in <module>
br.form.find_control("liststyle").get("leech").selected = True
File "C:\Python27\lib\site-packages\mechanize\_form.py", line 3101, in find_control
return self._find_control(name, type, kind, id, label, predicate, nr)
File "C:\Python27\lib\site-packages\mechanize\_form.py", line 3185, in _find_control
raise ControlNotFoundError("no control matching "+description)
mechanize._form.ControlNotFoundError: no control matching name 'liststyle'

Die Checkbox mit dem Namen Liststyle gibt es wieso sagt er das er sie nicht controlieren kann?

Re: Mechanize Checkboxen

Verfasst: Montag 26. Juni 2017, 23:56
von BlackJack
@phoenixx592: Bei mir funktioniert der Code. :K

Re: Mechanize Checkboxen

Verfasst: Dienstag 27. Juni 2017, 00:12
von snafu
Bei mir funktioniert der Code auch. Sollte zwar eigentlich nicht sein, aber möglicherweise hilft ein Upgrade auf eine aktuelle mechanize Version? Das geht so:
[codebox=bash file=Unbenannt.bsh]pip install -U mechanize[/code]

Re: Mechanize Checkboxen

Verfasst: Dienstag 27. Juni 2017, 14:12
von phoenixx592
snafu wie lautet der Befehl unter windows ? Denke pip ist Linux shell bezogen oder ?
Bei mir funktioniert der code.
Nein er wird euch den html code von der Startseite ausgeben und nicht von der seite http://www.proxy-listen.de/Proxy/Proxyliste.html oder sind bei euch ip adressen angegeben im code ? Hab auch schon an Java skript gedacht aber es ist kein Java skript aktiv auf der Seite... :evil: :evil: :evil: :evil: :evil: :evil: :evil:

Re: Mechanize Checkboxen

Verfasst: Dienstag 27. Juni 2017, 14:40
von phoenixx592
Ich habe mich über die funtkion pip informiert und möchte das mal kurz erklären.

pip ist ein weiteres Python Modul man kann es unter https://pip.pypa.io/en/stable/installin ... nstall-pip nachlesen wie man es installiert bzw. benutzt :D

Re: Mechanize Checkboxen

Verfasst: Dienstag 27. Juni 2017, 14:43
von phoenixx592
so mein mechanize ist auf den neusten stand nur bekomme ich immernoch die Indexseite von proxylisten.de ausgegeben :oops:

Re: Mechanize Checkboxen

Verfasst: Dienstag 27. Juni 2017, 15:02
von lackschuh
[codebox=html5 file=Unbenannt.html]onclick="doSubmit()[/code]
ich geh davon aus, dass du so was wie Selenium dafür brauchst.

Re: Mechanize Checkboxen

Verfasst: Dienstag 27. Juni 2017, 15:24
von snafu
Auf den Inhalt habe ich nicht geachtet. Es kam jedenfalls nicht die von dir gezeigte Fehlermeldung.

Re: Mechanize Checkboxen

Verfasst: Dienstag 27. Juni 2017, 15:35
von phoenixx592
Ich würde auch Selenium benutzen nur öffnet sich da direkt der Browser und macht das ganze nicht verdeckt und sexy in der Console :wink:

Re: Mechanize Checkboxen

Verfasst: Dienstag 27. Juni 2017, 15:50
von BlackJack
@phoenixx592: Sowie JavaScript ins Spiel kommt, und das kommt heutzutage ja recht schnell ins Spiel, reicht so etwas simples wie `mechanize` nicht mehr aus. Man muss dann entweder einen Browser oder zumindest eine Browser-Engine verwenden — dabei muss ja auch nicht zwingend etwas angezeigt werden — oder man muss selbst herausfinden wie die Kommunikation zwischen einem echten Browser und dem Server abläuft und das manuell nachbauen. Dann mit `requests` und `lxml.html` und eventuell noch etwas wie BeautifulSoup.

Re: Mechanize Checkboxen

Verfasst: Dienstag 27. Juni 2017, 15:54
von phoenixx592
da ist aber kein JAVA skript drin! :mrgreen: