Mechanize Checkboxen

Django, Flask, Bottle, WSGI, CGI…
phoenixx592
User
Beiträge: 66
Registriert: Sonntag 25. Juni 2017, 16:41

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")
Zuletzt geändert von Anonymous am Montag 26. Juni 2017, 19:40, insgesamt 1-mal geändert.
Grund: Quelltext in Python-Codebox-Tags gesetzt.
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.
phoenixx592
User
Beiträge: 66
Registriert: Sonntag 25. Juni 2017, 16:41

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()?)
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.
phoenixx592
User
Beiträge: 66
Registriert: Sonntag 25. Juni 2017, 16:41

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()?)
Zuletzt geändert von Anonymous am Montag 26. Juni 2017, 22:03, insgesamt 1-mal geändert.
Grund: Quelltext in Python-Codebox-Tags gesetzt.
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.
__deets__
User
Beiträge: 14493
Registriert: Mittwoch 14. Oktober 2015, 14:29

Du musst response schon aufrufen - das machen die () dahinter.... - und den Rueckgabewert auch benutzen, um darauf get_data() aufzurufen.
phoenixx592
User
Beiträge: 66
Registriert: Sonntag 25. Juni 2017, 16:41

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")
Zuletzt geändert von Anonymous am Montag 26. Juni 2017, 23:48, insgesamt 1-mal geändert.
Grund: Quelltext in Python-Codebox-Tags gesetzt.
phoenixx592
User
Beiträge: 66
Registriert: Sonntag 25. Juni 2017, 16:41

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?
phoenixx592
User
Beiträge: 66
Registriert: Sonntag 25. Juni 2017, 16:41

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?
Zuletzt geändert von Anonymous am Montag 26. Juni 2017, 23:51, insgesamt 1-mal geändert.
Grund: Quelltext in Python-Codebox-Tags gesetzt.
BlackJack

@phoenixx592: Bei mir funktioniert der Code. :K
Benutzeravatar
snafu
User
Beiträge: 6731
Registriert: Donnerstag 21. Februar 2008, 17:31
Wohnort: Gelsenkirchen

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]
phoenixx592
User
Beiträge: 66
Registriert: Sonntag 25. Juni 2017, 16:41

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:
phoenixx592
User
Beiträge: 66
Registriert: Sonntag 25. Juni 2017, 16:41

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
phoenixx592
User
Beiträge: 66
Registriert: Sonntag 25. Juni 2017, 16:41

so mein mechanize ist auf den neusten stand nur bekomme ich immernoch die Indexseite von proxylisten.de ausgegeben :oops:
lackschuh
User
Beiträge: 281
Registriert: Dienstag 8. Mai 2012, 13:40

[codebox=html5 file=Unbenannt.html]onclick="doSubmit()[/code]
ich geh davon aus, dass du so was wie Selenium dafür brauchst.
Benutzeravatar
snafu
User
Beiträge: 6731
Registriert: Donnerstag 21. Februar 2008, 17:31
Wohnort: Gelsenkirchen

Auf den Inhalt habe ich nicht geachtet. Es kam jedenfalls nicht die von dir gezeigte Fehlermeldung.
phoenixx592
User
Beiträge: 66
Registriert: Sonntag 25. Juni 2017, 16:41

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:
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.
phoenixx592
User
Beiträge: 66
Registriert: Sonntag 25. Juni 2017, 16:41

da ist aber kein JAVA skript drin! :mrgreen:
Antworten