Django视图调用Python脚本无法检测chromedriver问题求助
我来帮你分析下这个问题——这大概率是工作目录不一致导致的!
你单独运行traffic.py时,脚本的工作目录就是它所在的文件夹,所以能直接找到同目录的chromedriver.exe;但当通过Django视图调用这个脚本时,Django进程的工作目录可能是你的项目根目录(或者其他路径),这时候脚本就找不到同目录的chromedriver了。
给你几个靠谱的解决方案:
1. 在traffic.py里用绝对路径指定chromedriver
这是最稳妥的方式,不管脚本在哪运行都能准确定位到chromedriver。你可以在traffic.py里先获取脚本自身的目录,再拼接chromedriver的路径:
import os from selenium import webdriver # 获取当前脚本所在的绝对目录 script_dir = os.path.dirname(os.path.abspath(__file__)) # 拼接chromedriver的绝对路径 chromedriver_path = os.path.join(script_dir, 'chromedriver.exe') # 使用绝对路径初始化浏览器 driver = webdriver.Chrome(executable_path=chromedriver_path)
2. 调用脚本时指定工作目录
在Django视图的run函数里,通过cwd参数指定脚本所在的目录,这样脚本运行时的工作目录就和你单独运行时一致了:
import os import sys from subprocess import run def generate_traffic(request): # 其他代码 script_path = 'C://Users//Maisum Abbas//learning_users//trafficapp//traffic.py' # 获取脚本所在目录 script_dir = os.path.dirname(script_path) # 调用脚本时指定工作目录 out = run( [sys.executable, script_path, "--domain", url, "--thread", requests, "--max-clicks", maximum, "--min-clicks", minimum], cwd=script_dir )
3. 把chromedriver加入系统环境变量(备选)
如果你不想改代码,可以把chromedriver.exe所在的目录添加到系统的PATH环境变量里。这样系统在任何路径下都能找到chromedriver,但这种方式依赖系统配置,换机器的话需要重新设置,不如前两种灵活。
你可以先试试第一种方案,应该能直接解决问题!
内容的提问来源于stack exchange,提问作者Maisum Abbas
相关产品推荐
相关产品推荐

