2013-02-19 2 views
2

루비에서와 마찬가지로 파이썬에서 시간 초과를 설정하려고합니다.파이썬 스프린터 웹 크롤러에서 시간 초과 설정

링크를 클릭하면 팝업이 열리지 만 죽일 때까지 스크립트가 멈추기 때문에 액세스 할 수 없습니다. 나는이 팝업에 루비 watir-webdriver에서 아무런 기쁨도 느끼지 못하게 노력해왔다.

팝업으로 통화 제한 시간을 초과 한 다음 팝업 창에 액세스하려고합니다.

@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!' 

도움이 될 것입니다.

+0

. 또한 데코레이터를 사용하면 작동하지 않습니다. 'timeout'을 적용하기 전에 함수에서 코드를 래핑해야 할 것입니다. –

+0

저는 파이썬을 사용하고 있으며 ASPX를 탐색하려고하는 사이트를 파편으로 만듭니다. 닷넷. 팝업을 시작할 수는 있지만 스크립트가 멈추고 진행되지 않을 때 팝업에 액세스 할 수 없습니다. 저는 파이썬에 매우 익숙하며 가능한 한 빨리 읽으려고합니다. 나는 당신이 기능에 대해 무엇을 말하는지 잘 모르겠습니다. – user1279586

답변

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

그냥이 시도 : 당신은 당신이 사용하고 등있는 프레임 워크로 더 컨텍스트를 제공해야 할거야

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