2013-02-19 1 views
2

Essayez de définir un délai d'expiration en python un peu comme vous le feriez en ruby.définir un délai dans python splinter web crawler

J'ai un lien qui quand je clique dessus ouvre un popup mais je ne peux pas y accéder parce qu'il fait geler le script jusqu'à ce que je le tue. J'ai essayé pendant des mois pour accéder à cette popup sans joie dans ruby ​​watir-webdriver. J'essaie de temporiser l'appel à popup, puis accéder à la fenêtre pop-up.

@timeout(3) 
try: 
b.execute_script("javascript:openMdlWindow('InvestmentDetailOptions.aspx?IDAssetType=','620','600');if(window.document.RetValue == '2'){window.parent.LoadinIframe('InvestmentDetail.aspx?FromMenu=N&IDAssetType=','Investment Details > Full View','false');}") 
except Exception, e: 
print 'timeout!' 

toute aide sera grandement appréciée.

+0

Vous allez devoir fournir plus de contexte, comme quel cadre vous utilisez. Également utiliser un décorateur ici ne fonctionnera pas. Vous allez devoir envelopper votre code dans une fonction avant d'y appliquer 'timeout'. –

+0

J'utilise python et scinder le site que j'essaie de naviguer est ASPX .Net. Je suis en mesure d'obtenir le popup pour lancer mais ne peut pas accéder à la popup après que le script se bloque et ne progresse pas. Je suis très nouveau à Python et j'essaie de lire aussi vite que possible. Je ne suis pas sûr de ce que vous parlez de la fonction. – user1279586

Répondre

2
import signal 
from time import sleep 

class TimeoutException(Exception): 
    pass 

def do_something_else(): 
    time = 5 
    sleep(time) 
    return 'do_something_else has to run for %d seconds' % time 

def handler(signum, frame): 
    raise TimeoutException 

def do_something_with_timeout(callback, timeout=3): 
    signal.signal(signal.SIGALRM, handler) 
    signal.alarm(timeout) 
    try: 
     value = callback() 
     signal.alarm(0) 
     return value 
    except TimeoutException: 
     pass 
    signal.signal(signal.SIGALRM, signal.SIG_IGN) 
    return 'time out' 

def main(): 
    print 'hello' 
    print do_something_with_timeout(do_something_else) 
    print 'world' 

main() 
3

Essayez ça:

from splinter import Browser 
from selenium.common.exceptions import TimeoutException 
b = Browser('firefox') 
b.driver.set_page_load_timeout(1) 
try: 
    b.visit('http://www.bbc.com') 
except TimeoutException: 
    pass 
print b.html