Ich bin nun bei meinem Raspi B+ so vorgegangen Zugang über Konsole (Telnet) als root:
Code:
sudo apt-get update
Code:
sudo apt-get install python-mechanize
Code:
sudo reboot
- Dann habe ich das Script NOIP-Account-Renew (von @DarkStarXxX ) nach /usr/local/bin/ geschoben und die Rechte auf 755 gesetzt.
- Über Bearbeiten habe ich dann die Logindaten eingegeben (Zeile 14 + 15) und gespeichert.
- Anschließend habe ich das Script gestartet und getestet:
Code:
/usr/local/bin/NOIP-Account-Renew
Antwort in der Konsole:
Code:
root@raspibplus:~# /usr/local/bin/NOIP-Account-Renew
OK host.php?host_id=1......x
Weil die Ausgabe in der Konsole im normalen Betrieb für mich keinen Sinn macht, habe ich das Script nach Post 2 von @janni1 noch etwas angepasst, damit eine Logdatei auf dem Raspi angelegt wird:
- in Zeile 6 hinzugefügt:
Code:
import datetime
- den kompletten Bereich # Check if OK ersetzt:
Code:
# Check if OK
if brow.response().read().find("Update will be applied") >= 0:
f1=open('/usr/local/logs/renew.log', 'a+')
ts=datetime.datetime.now().strftime("%d. %B %Y %I:%M%p")
print >> f1,ts,"OK " + str_host
#print("OK " + str_host)
else:
print >> f1,ts,"KO " + str_host
#print("KO " + str_host)
return
Nun wird bei Ausführen des Scripts im Pfad /usr/local/logs/ die Datei renew.log angelegt und das Log darin fortgeschrieben.
Code:
17. October 2016 08:20PM OK host.php?host_id=1......x
17. October 2016 08:20PM OK host.php?host_id=1......x
18. October 2016 06:00AM OK host.php?host_id=1......x
Damit das Script automatisch auf dem Raspi ausgeführt wird, habe ich einen Cronjob angelegt.
Code:
crontab -e
ganz unten eintragen und speichern:
Code:
0 6 1,15 * * /usr/local/bin/NOIP-Account-Renew
Du musst angemeldet sein, um Bilder zu sehen.
Nun wird zweimal im Monat (am 1. und 15. des Monats um 6 Uhr) das Script durchgeführt und in der Log-Datei protokolliert.
Hinweis: Auch wenn im Log nur ein Account erscheint, sind bei mir zwei Accounts aktualisiert worden.
--------------------------------------------------
Hallo.
Ich lasse das Script auf einem BananaPi mit Debian 8 laufen.
Installiert sind:
python-mechanize/stable,now 1:0.2.5-3 all [installiert]
Python2 Version 2.7.9
Python3 Version 3.4.2
Beinm Aufruf des Scriptes bekomme ich folgende Fehlermeldung:
/tmp/no-ip/NOIP-Account-Renew Traceback (most recent call last):
File "/tmp/no-ip/NOIP-Account-Renew", line 47, in <module>
br.find_link(text='Manage Hosts')
File "/usr/lib/python2.7/dist-packages/mechanize/_mechanize.py", line 620, in find_link
raise LinkNotFoundError()
mechanize._mechanize.LinkNotFoundError
Ich nehme mal an, daß mechanize hier das falsche Python aufruft ? Wenn ja, wie kann ich Python3 nutzen ?
Danke für all Tips
Jan
Um meine Frage (2 Posts weiter oben) selbst zu beantworten.
soweit ich im Internet gelesen habe, funktioniert mechanize nur mit Python 2.x nicht aber mit Python3.
wenn man nun mechanize nicht über apt-get installiert, sondern über das im mechanize Ordner liegende Install Script (sudo python setup.py install) dann funktioniert es. allerdings auch hier, nur der erste NOIP account wird geupdated.
Was ich allerdings nicht finde, wenn ich mich bei meinem NOIP Account einlogge, wo ich manuel klicken muss, damit ich das auf 30 Tage setzen kann ? In welchem Menu ist das ?
Hi,
schau in das Script
Da wird als erstes die Seite aufgemacht
Sie müssen registriert sein, um Links zu sehen.
dann pass und user eingetragen und submited
dann "managed host" gesucht und geclickt
nun "Modify" gesucht und geclickt
hier dann "update_host"
Edit: Vielleicht gäbe es ja die Möglichkeit, das über die unterschiedlichen "host_id"s zu regeln.
also vor # Follow all Modify links irgendwie sowas wie
Ja...das hatte ich vorhin schon einmal mauell gemacht (Das Script nutzt die "alte" No-IP Seite......) Hat aber irgendwie nicht funktioniert.......jetzt sehe ich es: Die Reihenfolge auf der neuen NO-IP Seite ist anders wie die alte Seite....ich habe immer den 2. Host überprüft und der stand immer auf 9 Tage Rest. (Ich habe 5 Hosts, da verliert man schon mal den Überblick Danke janni
Ich habe mit Python noch nie gearbeitet... Trotzdem scheine ich eine Lösung zu haben. Das Skript habe ich angepasst. Das Problem waren die Links, die nach dem ersten Klick wohl weg waren...
Hier mal das angepasste Skript:
Code:
#!/usr/bin/env python
### *|--------------------------------|* ###
### *| NO-IP Account-Renew Script 1.0 |* ###
### *| (c) by DarkStarXxX @ DEB |* ###
### *|--------------------------------|* ###
# Modifiziert von MegaV0lt @ DEB
# VERSION=161019
import mechanize
import ssl
if hasattr(ssl, '_create_unverified_context'):
ssl._create_default_https_context = ssl._create_unverified_context
import time
import datetime
# Define data
USERNAME = ""
PASSWORD = ""
HOST_URL = "https://www.noip.com/members/dns/"
LOG_FILE = "/var/log/NOIP_renew.log"
# Date and time for log
ts=datetime.datetime.now().strftime("%d. %B %Y %I:%M%p")
# Update host
def update_host(str_host, brow):
brow.select_form(nr=00)
brow.submit()
# Check if OK
if brow.response().read().find("Update will be applied") >= 0:
f1=open(LOG_FILE, 'a+')
print >> f1,ts,"OK " + str_host
print("OK " + str_host)
else:
print >> f1,ts,"FAILED " + str_host
print("FAILED " + str_host)
return
# Browser options
br = mechanize.Browser()
br.set_handle_equiv(True)
br.set_handle_robots(False)
br.set_handle_redirect(True)
br.set_handle_referer(True)
br.addheaders = [('User-agent', 'Chrome')]
br.set_handle_refresh(mechanize._http.HTTPRefreshProcessor(), max_time=1)
# Open site
br.open(HOST_URL)
br.select_form(nr=0)
br.form["username"] = USERNAME
br.form["password"] = PASSWORD
br.submit()
br.find_link(text='Manage Hosts')
req = br.click_link(text='Manage Hosts')
br.open(req)
mylink = [] # Leers Array
# Links in Array speichern
for link in br.links():
if link.text == 'Modify':
mylink += [link]
# Links klicken
for link in mylink:
req = br.click_link(link)
br.open(req)
update_host(link.url, br)
Hier die Ausgabe auf der Konsole:
Code:
root auf HP-T5730 am 19.10.2016 11:38
[~] # python /mnt/usbdrive/sbin/NOIP-Account-Renew
OK host.php?host_id=**11**
OK host.php?host_id=**39**
OK host.php?host_id=**23**