2013-02-19 8 views
2

Попытка установить тайм-аут в python так же, как и в рубине.установить тайм-аут в python splinter web crawler

У меня есть ссылка, что когда я нажимаю на нее, открывается всплывающее окно, но я не могу получить к нему доступ, потому что это заставляет замораживание скрипта, пока я его не убью. Я пытался в течение нескольких месяцев получить доступ к этому всплывающему меню, чтобы не радоваться рубину 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

Я использую python и осколки сайта, который я пытаюсь выполнить, это ASPX .Net. Я могу получить всплывающее окно для запуска, но не может получить доступ к всплывающему окну после того, как скрипт просто зависает и не будет прогрессировать. Я очень новичок в python и стараюсь читать так быстро, как только могу. Я не уверен, что вы говорите о функции. – 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