Python 如何修复selenium在从其他脚本调用时未在服务器中打开浏览器的问题?

Python 如何修复selenium在从其他脚本调用时未在服务器中打开浏览器的问题?,python,selenium,subprocess,Python,Selenium,Subprocess,我想通过从特定站点单击按钮打开selenium浏览器。我正在使用flask服务器。 因此,从端点,我使用子流程调用selenium脚本 server.py import subprocess args = [PYTHON_PATH, SCRIPT_PATH] subprocess.Popen(args, cwd="/", stdout=subprocess.DEVNULL,

我想通过从特定站点单击按钮打开selenium浏览器。我正在使用
flask
服务器。 因此,从端点,我使用
子流程
调用selenium脚本

server.py

import subprocess

args = [PYTHON_PATH, SCRIPT_PATH]
subprocess.Popen(args,
                 cwd="/",
                 stdout=subprocess.DEVNULL,
                 stderr=subprocess.STDOUT,
                 start_new_session=True)

from selenium import webdriver

chromeOptions = webdriver.ChromeOptions()
chromeOptions.add_experimental_option('excludeSwitches', ['enable-logging'])
chromeOptions.add_argument("--headless")
chromeOptions.add_argument('--no-sandbox')
chromeOptions.add_argument('--disable-dev-shm-usage')
chromeOptions.add_argument('--disable-gpu')

print("Starting Browser")
browser = webdriver.Chrome(executable_path='/usr/local/bin/chromedriver', chrome_options=chromeOptions)
print("Browser opened")
下面是打开浏览器的脚本

script.py

import subprocess

args = [PYTHON_PATH, SCRIPT_PATH]
subprocess.Popen(args,
                 cwd="/",
                 stdout=subprocess.DEVNULL,
                 stderr=subprocess.STDOUT,
                 start_new_session=True)

from selenium import webdriver

chromeOptions = webdriver.ChromeOptions()
chromeOptions.add_experimental_option('excludeSwitches', ['enable-logging'])
chromeOptions.add_argument("--headless")
chromeOptions.add_argument('--no-sandbox')
chromeOptions.add_argument('--disable-dev-shm-usage')
chromeOptions.add_argument('--disable-gpu')

print("Starting Browser")
browser = webdriver.Chrome(executable_path='/usr/local/bin/chromedriver', chrome_options=chromeOptions)
print("Browser opened")
当从shell中打开
script.py
时,它工作正常。但是,当从
server.py
作为子进程调用时,它会在
启动浏览器时停止。
未显示任何错误消息。浏览器未启动。

如何修复此问题?

我必须将
DISPLAY
环境变量设置为
:0
。并更新
PATH
变量

导入子流程
//这两条线
操作系统环境['DISPLAY']=':0'
os.environ['PATH']='/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/usr/bin:/sbin:/bin'
args=[PYTHON路径,脚本路径]
子进程Popen(args,
cwd=“/”,
stdout=subprocess.DEVNULL,
stderr=subprocess.STDOUT,
启动新会话(会话=真)
这就解决了问题

同样的解决方案也适用于那些通过
cronjob
运行脚本的人。
在调用脚本之前,在crontab文件中设置这些环境变量。

路径
可执行文件\u path='/usr/local/bin/chromedriver
是否在服务器上正确设置?@cruisepandey是。这就是为什么它在shell中工作。