Registriere dich noch heute kostenlos, um Mitglied zu werden! Sobald du angemeldet bist, kannst du auf unserer Seite aktiv teilnehmen, indem du deine eigenen Themen und Beiträge erstellst und dich über deinen eigenen Posteingang mit anderen Mitgliedern unterhalten kannst! Zudem bekommst du Zutritt zu Bereichen, welche für Gäste verwehrt bleiben
Registriere dich noch heute kostenlos, um Mitglied zu werden! Sobald du angemeldet bist, kannst du auf unserer Seite aktiv teilnehmen, indem du deine eigenen Themen und Beiträge erstellst und dich über deinen eigenen Posteingang mit anderen Mitgliedern unterhalten kannst! Zudem bekommst du Zutritt zu Bereichen, welche für Gäste verwehrt bleiben
Task Scheduler has completed a scheduled task.
Task: no_ip_update
Start time: Sat, 19 Nov 2016 10:24:39 GMT
Stop time: Sat, 19 Nov 2016 10:24:54 GMT
Current status: 0
Standard output/error:
NO-IP Account-Renew Script #161021.3
host_id=31330251 [OK]
host_id=30897053 [OK]
host_id=30962292 [OK]
Vielleicht findet er Python nicht. Gib mal Python mit Pfad an
0 6 1,15 * * /usr/bin/python /home/scripts/Oscam/NOIP-Account-Renew
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
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 ?
Jan
Ja, die haben die alte alternative Seite abgeschaltet.Ich denke die haben an der Seite was verändert. Kann man das noch auf der Seite bestätigen?
Das hoffe ich mal nicht, wird sich aber erst nächsten Monat herausstellen.Scheint nur noch per eMail-Link zu gehen
br.find_link(text='Manage Hosts')
req = br.click_link(text='Manage Hosts')
br.open(req)
======== Auftrag gestartet: 2018-08-07 10:56:58 ================================
Aktuelle IP...
Fertig. Aktuelle IP lautet 'XX.XX.XX.XX'
Aktualisiere/Erneuere DynDNS Adresse(n) bei NO-IP.com
Fertig. Aktualisierung/Erneuerung von 5 Adresse(n) mit IP 'XX.XX.XX.XX':
- 1.sytes.net
- 2.sytes.net
- 3.sytes.net
- 4.sytes.net
- 5.sytes.net
======== Auftrag beendet: 2018-08-07 10:57:11 ==================================
root auf HP-T610 am 07.08.2018 11:05
[~] # NOIP-Account-Renew
NO-IP Account-Renew Script #180807
host_id=4xxx90 [OK]
host_id=4xxx97 [OK]
host_id=3xxx07 [OK]
#!/usr/bin/env python
# -*- coding: utf-8 -*-
### *|--------------------------------|* ###
### *| NO-IP Account-Renew Script 1.0 |* ###
### *| (c) by DarkStarXxX @ DEB |* ###
### *|--------------------------------|* ###
# Modifiziert von MegaV0lt @ DEB
# Modifiziert von SLASH @ DEB
VERSION=180807
# Wichtiger Hinweis: Externe Konfiguration
# Die Login-Daten für No-IP und eMail können aus einer externen Datei, welche in
# der Variable "CONFIG_FILE" definiert werden muss gelesen werden.
# Besonderheit: Die Datei im Dateisystem muss die Endung ".py" haben.
# Bitte dort die Daten eintragen (Im gleichen Verzeichnis wie das Skript!)
CONFIG_FILE = "NOIP_Account_Renew" # Ohne .py (Im gleichen Verzeichnis wie das Skript!)
# Kann abgeschaltet werden, in dem man CONFIG_FILE = "" setzt. In dem Fall die
# Variablen hier ausfüllen!
USERNAME = "" # No-IP Benutzername
PASSWORD = "" # No-IP Passwort
FROMADRESS = "" # eMail-Sender
TOADRESS = "" # eMail-Empfänger
SMTPSERVER = "" # SMTP-Serveradresse ("" zum deaktivieren)
SMTPPORT = "" # SMTP-Port (Z. B. 25)
SMTPPASS = "" # Server verlangt Autentification ("" zum deaktivieren)
# Vorgaben
LOG_FILE = "" # Kein Log, wenn nächste Zeile auskommentiert ist
#LOG_FILE = "/var/log/NOIP_renew.log" # Dateiname wird auch für die eMail verwendet
MAIL_SUBJECT = "NO-IP Account Updater" # Betreff der Status eMail
MAIL_BODY = "NO-IP Account Updater Service updated your NO-IP Account for another 30 days.\nPlease check the attached Logfile\n\n" # Text in der eMail
HOST_URL = "https://www.noip.com/members/dns/"
RESULT_STR = []
import importlib
import mechanize
import time
import ssl
if hasattr(ssl, '_create_unverified_context'):
ssl._create_default_https_context = ssl._create_unverified_context
# Funktion: update_host - Für jeden Host "Modify" klicken
def update_host(str_host, brow):
global RESULT_STR
brow.select_form(nr=00) ; brow.submit()
# Check if OK
if LOG_FILE:
ts = time.strftime("%d.%m.%Y %H:%M:%S") # Zeitstempel für das Log (19.10.2016 12:51:30)
f1 = open(LOG_FILE, 'a+')
host_id = after(str_host, "?") # Alle Zeichen nach dem ?
if brow.response().read().find("Update will be applied") >= 0:
if LOG_FILE: print >> f1,ts,host_id + " [OK]" # Ausgabe in das Log
print(host_id + " [OK]") # Ausgabe auf der Konsole (und cron)
RESULT_STR.append(host_id + " [OK]") # Für die eMail
else:
if LOG_FILE: print >> f1,ts,host_id + " [FAILED]"
print(host_id + " [FAILED]")
RESULT_STR.append(host_id + " [FAILED]")
return
# Funktion: after - Liefert Zeichenkette nach Zeichen a
def after(value, a):
# Find and validate first part
pos_a = value.rfind(a)
if pos_a == -1: return value # Nicht gefunden: Ganzer Wert zurück!
# Returns chars after the found string.
adjusted_pos_a = pos_a + len(a)
if adjusted_pos_a >= len(value): return ""
return value[adjusted_pos_a:]
# 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)
### Start
print "NO-IP Account-Renew Script #%s" % VERSION
if CONFIG_FILE:
myconf = importlib.import_module(CONFIG_FILE, package=None)
USERNAME = myconf.USERNAME ; PASSWORD = myconf.PASSWORD
FROMADRESS = myconf.FROMADRESS ; TOADRESS = myconf.TOADRESS
SMTPSERVER = myconf.SMTPSERVER ; SMTPPORT = myconf.SMTPPORT
SMTPPASS = myconf.SMTPPASS
# Seite öffnen
br.open(HOST_URL)
# Login
br.select_form(nr=0)
br.form["username"] = USERNAME ; br.form["password"] = PASSWORD
br.submit()
# Nicht mehr nötig, da die alternative Seite abgeschaltet wurde (August 2018)
#br.find_link(text='Manage Hosts')
#req = br.click_link(text='Manage Hosts')
#br.open(req)
# Links in Array speichern
mylink = [] # Leeres Array
for link in br.links():
if link.text == 'Modify': mylink += [link]
# Links klicken und Updaten
for link in mylink:
req = br.click_link(link)
br.open(req)
update_host(link.url, br)
####### SMTP Section ############
if not SMTPSERVER: quit() # Nur wenn SMTPSERVER gesetzt ist
import smtplib
from email.MIMEMultipart import MIMEMultipart
from email.MIMEText import MIMEText
from email.MIMEBase import MIMEBase
from email import encoders
msg = MIMEMultipart()
msg['From'] = FROMADRESS ; msg['To'] = TOADRESS
msg['Subject'] = MAIL_SUBJECT
body = MAIL_BODY
for var in RESULT_STR:
body = str(body) + str(var) + "\n"
msg.attach(MIMEText(body, 'plain'))
if LOG_FILE:
filename = after(LOG_FILE, "/") # Dateiname ohne Pfad
attachment = open(LOG_FILE, "rb")
part = MIMEBase('application', 'octet-stream')
part.set_payload((attachment).read())
encoders.encode_base64(part)
part.add_header('Content-Disposition', "attachment; filename= %s" % filename)
msg.attach(part)
# Example: Server Address and TCP Port - Exmaple: '192.168.1.1' , 25
server = smtplib.SMTP(SMTPSERVER, SMTPPORT)
server.starttls()
# Server verlangt Autentification (Nur wenn SMTPPASS gesetzt ist)
if SMTPPASS: server.login(FROMADRESS, SMTPPASS)
text = msg.as_string()
server.sendmail(FROMADRESS, TOADRESS, text)
server.quit()
Folge dem Video um zu sehen, wie unsere Website als Web-App auf dem Startbildschirm installiert werden kann.
Anmerkung: Diese Funktion ist in einigen Browsern möglicherweise nicht verfügbar.
Das Digital Eliteboard ist ein kostenloses Forum und ist auf Spenden angewiesen, um sich auch in Zukunft selbst zu finanzieren. Wenn auch du mit dem Digital Eliteboard zufrieden bist, würden wir uns über jede Unterstützung freuen.
Hier kannst du uns unterstützen SPENDEN