Seite 1 von 1

Python Timeout Funktion

Verfasst: Donnerstag 5. Februar 2015, 16:29
von Oezmen90
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

Re: Python Timeout Funktion

Verfasst: Donnerstag 5. Februar 2015, 16:59
von 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.

Re: Python Timeout Funktion

Verfasst: Donnerstag 5. Februar 2015, 17:28
von Oezmen90
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()

Re: Python Timeout Funktion

Verfasst: Donnerstag 5. Februar 2015, 19:44
von 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.