Brauche Hilfe bei einem alten python 2.x script

Wenn du dir nicht sicher bist, in welchem der anderen Foren du die Frage stellen sollst, dann bist du hier im Forum für allgemeine Fragen sicher richtig.
Antworten
Sunji117
User
Beiträge: 2
Registriert: Freitag 22. November 2019, 08:19

Guten Tag,
ich suche jemanden, der mir einen alten Python Script wieder zum Laufen kriegen kann. Es handelt sich um ein Script für ein Spiel, damit ich Zeit sparen kann. Der Script funktionierte 2012 noch.

Hier ist der Script :

Code: Alles auswählen

import msvcrt 
import time
import urllib2
import cookielib
import thread
import re
import os
import getpass
import webbrowser
import color_console as cons

def room():
     for x in range(len(field)):
          if field[x] == " ":
               print field[x]
               sys.stdout.flush()
          elif field[x]=="O":
               default_colors = cons.get_text_attr()
               default_bg = default_colors & 0x0070
               default_fg = default_colors & 0x0007
               cons.set_text_attr(cons.BACKGROUND_RED | default_bg |
                          cons.BACKGROUND_INTENSITY)
               print(" ")
               cons.set_text_attr(default_colors)
               sys.stdout.flush()
          if x == 6 and x == 13:
               print ""


loop = 1
server=""
use=""
info = "Server: ["+server+"] | RGA: ["+use+ "]\n"
Header = """
____________________________
     |   |_____| ____/ ____/
     |   |     |/_____/_____                                                                  
-------------------------------
"""

#getch()
def getch():
     os.system("bash -c \"read -n 1\"")
#Cookiejar and Opener
cj = cookielib.CookieJar()
opener = urllib2.build_opener(urllib2.HTTPCookieProcessor(cj))
opener.addheaders = [('User-agent', 'Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.8.1.6) Gecko/20070725 Firefox/2.0.0.6')]


f = lambda v, l: [v[i*l:(i+1)*l] for i in range(int(math.ceil(len(v)/float(l))))]

def header():
    os.system("cls")
    print Header
    print info
#anti-lag
def openurl(url):
    lagsafe = 1
    while lagsafe == 1:
        try:
            site = opener.open(url)
            lagsafe = 0
        except IOError:
            print "Lag..."
        return site
#
def alo2(url, urla):

    lagsafe = 1
    while lagsafe == 1:
        try:
            site = opener.open(url, urla)
            lagsafe = 0
        except IOError:
            print "Lag..."
        return site

# Define a function for the thread
def Questfinish( threadName, delay):
    count = 0
    while count != 1:
        count += 1
        
        openurl("http://"+server+".outwar.com/"+finish[0])

         
# Define
amountsockets= range(25)
print Header+info
print "Login:"
#login = msvcrt.getch()
login = raw_input(">")
users = []
servers = []



server = servers[int(login)-1]
use = users[int(login)-1]
info = "Server: ["+server+"] | RGA: ["+use+ "]"
header()
pas = raw_input("Pass:\n")



loginrpg = alo2("http://"+server+".outwar.com/myaccount.php", "login_username="+use+"&login_password="+pas+"")

cookie = str(cj)
cooksplit = cookie.split('<')
cooki = re.findall('rg_sess_id=(.*?) for .outwar.com/>', cooksplit[6])

#webbrowser.open("http://"+server+".outwar.com/world.php?rg_sess_id="+cooki[0])
#raw_input("Opening Session in Browser\nPress any Key to Continue.")
#webbrowser.open("http://"+server+".outwar.com/world.php?rg_sess_id="+cooki[0])
while 1:
                   
         elif action == "o":
            webbrowser.open("http://"+server+".outwar.com/world.php?rg_sess_id="+cooki[0])

        elif action == "q":
               talk = openurl("http://"+server+".outwar.com/mob.php?userpawn=&id="+quest[0]).read()
               text = re.findall("<p>(.*?)</p>", talk)
               a = re.findall("""font size="3"><b>(.*?)</b>""", talk)
               quest = re.findall("""a href="(.*?)"><""", talk)
               header()
               print text[0]
               raw_input(a[0])
               talk1 = openurl("http://"+server+".outwar.com/"+quest[0]).read()
               finish = re.findall("""a href="(.*?)"><""", talk1)
               for x in amountsockets:
                        thread.start_new_thread( Questfinish, ("Quest", 0, ) )
               print "quest finish"
               
            
    except:
        print "unknown error"






 
Sirius3
User
Beiträge: 18272
Registriert: Sonntag 21. Oktober 2012, 17:20

@Sunji117: Welche Fehlermeldungen kommen denn? was hast Du schon versucht? Wo kommst Du nicht weiter?

Die Einrückungen sollten einheitlich auf 4 Leerzeichen pro Ebene angepasst werden. Weiter unten ist die Einrückung dann auch komplett kaputt und müßte repariert werden. Auch finde ich kein if zum elif.
Dann könnte man mit ` 2to3` versuchen, das gröbste von Python2 nach Python3 zu konvertieren.
Einiges, was Probleme machen könnte, wird gar nicht benutzt, kann also gelöscht werden.
Statt Strings mit + zusammenzustückeln, solltest Du Stringformatierung benutzen. Alles was auf Modulebene läuft solltest Du in eine Funktion, die man üblicherweise ` main` nennt, verschieben. Dann fallen auch gleich die ganzen globalen Variablen auf, die Du den Funktionen als Argumente übergeben solltest. Um sinnvoll Debuggen zu können, mußt die die kaputte "Fehlerbehandlung" rauslöschen.
Man sollte auf HTML nicht mit regulären Ausdrücken losgehen, sondern einen HTML-Parser verwenden.
Jankie
User
Beiträge: 592
Registriert: Mittwoch 26. September 2018, 14:06

Ich würde dir auch empfehlen den Code noch einmal zu bearbeiten, da sind manche mysteriöse Dinge dabei wie z.B. ein input Aufruf ohne den Input an eine Variable zu binden etc.

Beispiel zu Stringformatierung:

statt:

Code: Alles auswählen

info = "Server: ["+server+"] | RGA: ["+use+ "]\n"
besser:

Code: Alles auswählen

info = f"Server: [{server}] | RGA: [{use}]\n"
Zum Parsen würde ich dir BS4 empfehlen.
__deets__
User
Beiträge: 14545
Registriert: Mittwoch 14. Oktober 2015, 14:29

@Jankie: input nicht an eine Variable zu binden ist ein Weg, das Programm einfach auf eine Eingabe ("any key") warten zu lassen. Das ist also schon ok.

Und um das Skript zu "fixen", muesste man das Browserspiel spielen. Und ggf. auf andere Techniken setzen, wie zB Selenium. Und es auch noch ok finden, dass man bescheisst.
Jankie
User
Beiträge: 592
Registriert: Mittwoch 26. September 2018, 14:06

@__deets__ :
Okay klingt logisch, mich hat nur das a[0] dahinter irritiert, da er weiter oben

Code: Alles auswählen

a = re.findall("""font size="3"><b>(.*?)</b>""", talk)
aufruft und dann den

Code: Alles auswählen

raw_input(a[0])
aufruft. Da dachte ich er will einen Input haben der Abhängig vom dem result aus a ist.
Zuletzt geändert von Jankie am Freitag 22. November 2019, 14:18, insgesamt 1-mal geändert.
__deets__
User
Beiträge: 14545
Registriert: Mittwoch 14. Oktober 2015, 14:29

Was auch immer das war - kA. Kann ein Text aus dem Browser sein, der einen Informiert ob und wann man warten muss oder was weiss ich. Das Problem ist halt, dass man sich mit dem Spiel schon recht intim vertraut machen muss, um da was zu verbessern. Dazu hat glaube ich hier keiner Lust.
Antworten