我正在尝试构建一种服务,用户可以在其中插入其Javascript代码,并在特定网站上执行该代码。我使用python的selenium lib和chromedriver中的webdriver。问题是,如果用户使用无限循环提交Javascript代码,则python脚本会卡住。
python脚本需要处理许多任务,例如:进入网站并执行一些Javascript代码。因此,我承受不了它的卡住。众所周知,JavaScript中的无限循环会导致浏览器冻结。但是,是否有某种方法可以设置Webdriver的execute_script方法的超时时间?我想在超时后返回python并在execute_script命令后继续运行代码。这可能吗?
from selenium import webdriver
chromedriver = "C:\chromedriver\chromedriver.exe"
driver = webdriver.Chrome(chromedriver)
driver.get("http://www.bulletproofpasswords.org/") # Or any other website
driver.execute_script("while (1); // Javascript infinite loop causing freeze")
答案 0 :(得分:1)
您可以为driver.execute_script("while (1);")
通话设置超时。
我发现another post可以解决此问题。
基本上,如果您使用的是Unix系统,则可以使用signal为driver.execute_script("while (1);
调用设置超时。
或者如果可以在单独的进程中运行它,然后使用multiprocessing.Process
结束该过程,则结束该过程。我包括了另一篇文章中给出的示例:
import multiprocessing
import time
# bar
def bar():
for i in range(100):
print "Tick"
time.sleep(1)
if __name__ == '__main__':
# Start bar as a process
p = multiprocessing.Process(target=bar)
p.start()
# Wait for 10 seconds or until process finishes
p.join(10)
# If thread is still active
if p.is_alive():
print "running... let's kill it..."
# Terminate
p.terminate()
p.join()