Python 如何修复selenium在从其他脚本调用时未在服务器中打开浏览器的问题?
我想通过从特定站点单击按钮打开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,
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中工作。