指令碼超時

指令碼超時錯誤是一個 WebDriver 錯誤,當用戶提供的指令碼在會話的指令碼超時時間到期之前沒有完成時發生。

指令碼超時時間是一個可配置的選項,這意味著您可以更改驅動程式中斷注入指令碼所花費的時間。預設情況下,驅動程式將在中斷指令碼並返回指令碼超時錯誤之前等待 30 秒,但這可以擴充套件、限制和設定為無限。

如果會話指令碼超時時間使用 null 值設定為無限,則您有將會話置於不可恢復狀態的風險。請注意,這應該謹慎使用。

示例

考慮以下非同步指令碼,該指令碼將在 35 秒後解析承諾或呼叫回撥

python
from selenium import webdriver
from selenium.common import exceptions

session = webdriver.Firefox()
try:
    session.execute_script("""
        let [resolve] = arguments;
        setTimeout(resolve, 35000);
        """)
except exceptions.ScriptTimeoutException as e:
    print(e.message)

輸出

ScriptTimeoutException: Timed out after 35000 ms

但是,如果您有一個預計會花費更長時間的指令碼,則可以透過使用功能來擴充套件會話的預設指令碼超時時間

python
from selenium import webdriver
from selenium.common import exceptions

session = webdriver.Firefox(capabilities={"alwaysMatch": {"timeouts": {"script": 150000}}})
session.execute_script("""
    let [resolve] = arguments;
    setTimeout(resolve, 35000);
    """)
print("finished successfully")

輸出

finished successfully

另請參閱