Python Timeout Funktion

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
Oezmen90
User
Beiträge: 2
Registriert: Montag 2. Februar 2015, 17:05

Hallo gemeinde,

ich hoffe ich bin hier richtig. Bin seit langem mit Python beschäftigt.
Ich brauche die Timeout funktion für ein Browser.

Der browser macht nix anderes als 3 Links in einem Tab zu öffnen und wieder zu schließen. Das Problem dabei ist die Timeout funktion. Sobald die funktion ausgeführt wird, öffnet sich ein neuer Firefox Browser bevor der alter Browser geschlossen wird. Wenn später mehrere Browser hinternander wegen der Timeout funktion starten, dann stürtzt der PC ab weil es überlasstet wird. Normalerweiße muss sich der Browser erst komplett schließen und dann wieder neu starten. Aber in meinem Fall passiert dies leider nicht. Ich hoffe mir kann jemand helfen. So sieht die Funktion aus:

Code: Alles auswählen

from selenium import webdriver
from selenium.webdriver.common.keys import Keys
import time
import sys
import subprocess
import urllib2

def layer(link):
  global driver
  i=0
  while i < 9999:
    try:
      driver = webdriver.Firefox()
      driver.set_page_load_timeout(30)  
      
      j=0
      while j<3:
	driver.get(link)
	body = driver.find_element_by_tag_name("body")
	body.send_keys(Keys.CONTROL + 't')
	j=j+1
      
      time.sleep(90)
      hma()
      driver.delete_all_cookies()
      driver.quit()
    except:
      print "Error, try again..."
    
    i=i+1
Zuletzt geändert von Anonymous am Donnerstag 5. Februar 2015, 16:50, insgesamt 1-mal geändert.
Grund: Quelltext in Python-Code-Tags gesetzt.
BlackJack

@Oezmen90: Ich neheme mal an mit „Timeout funktion” meinst Du das eine Ausnahme ausgelöst wird wenn eine Zeitüberschreitung auftritt. Du musst halt dafür sorgen das auch in diesem Fall der entsprechende Code ausgeführt wird der am Ende ”aufräumt”. Dafür gibt es den ``finally``-Zweig bei der Ausnahmebehandlung.

Dann solltest Du Dir mal den Style Guide for Python Code zu Herzen nehmen. Eingerückt wird mit vier Leerzeichen pro Ebene.

Und vielleicht mal ``for``-Schleifen kennenlernen. Die ``while``-Schleifen dort sind unpraktisch und fehleranfällig.

Und zu guter letzt sollte das ``global`` dort verschwinden. Wenn andere Funktionen diesen Wert benötigen übergibt man den als Argument und kippt den nicht einfach so in die Umgebung. Durch so etwas werden Programme sehr schnell unübersichtlich und schwer nachvollziehbar weil ”unsichtbare” Abhängigkeiten zwischen Funktionen bestehen.
Oezmen90
User
Beiträge: 2
Registriert: Montag 2. Februar 2015, 17:05

Danke für die antwort. Ich werde deinen Rat natürlich folgen.
Der entsprechende code ist ja bereits aufgelistet in der Funktion.
Sobald Zeitüberschreitung auftritt wird es ja auch ausgeführt.

Am ende der Funktion ist ja schon der befehl drin.
Wo genau liegt den der Fehler bitte ?

Code: Alles auswählen

driver.delete_all_cookies()
driver.quit()
BlackJack

@Oezmen90: Der Fehler liegt darin dass der Code nicht ausgeführt wird wenn davor eine Ausnahme ausgelöst wird. Dann geht es beim ``except`` weiter.
Antworten