gpt4 book ai didi

python - 在 Python Selenium chromedriver 中执行无限 JavaScript 循环时陷入困境

转载 作者:行者123 更新时间:2023-12-01 08:28:27 25 4
gpt4 key购买 nike

我正在尝试构建一项服务,用户可以在其中插入他们的 Javascript 代码,并在他们选择的网站上执行该代码。我使用 python 的 selenium lib 和 chromedriver 中的 webdriver。问题是,如果用户提交无限循环的 Javascript 代码,Python 脚本就会卡住。

Python 脚本需要处理许多任务,例如:访问网站并执行一些 Javascript 代码。所以,我不能让它陷入困境。众所周知,Javascript 中的无限循环会导致浏览器卡住。但是有没有办法为 webdriver 的execute_script 方法设置超时?我想在超时后返回 python,并在执行 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")

最佳答案

您可以为 driver.execute_script("while (1);") 调用设置超时。我找到了another post可以解决这个问题。

基本上,如果您使用的是 Unix 系统,则可以使用 signaldriver.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()

关于python - 在 Python Selenium chromedriver 中执行无限 JavaScript 循环时陷入困境,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54066534/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com