推理更新
目标:在后台中运行chrome web驱动程序,而不在Dock或应用栏中显示应用图标。仅供参考:我已经可以运行chrome headless,但我无法隐藏或不在我的应用栏中显示chrome图标。
原因:我正在构建一个并行访问各种网站的应用程序,我不希望为正在进行的同步任务显示chrome应用程序图标。我想在后台运行这些任务。
带有Chrome选项的当前代码,将显示无头铬
__declspec( dllexport ) void* setup(int c_force, int c_stepping, int c_iteration, int c_roots,
struct para* c_userdata, double* c_y0,
double c_reltol, double c_abstol)
{
int flag;
N_Vector y;
void* cvode_mem;
PARA* ptr_para;
ptr_para = c_userdata;
// ****** Set up vector with initial conditions ******
y = N_VNew_Serial(2);
NV_Ith_S(y,0) = c_y0[0];
NV_Ith_S(y,1) = c_y0[1];
// ****** Create cvode object with stepping and iteration method ******
if(c_iteration==CV_FUNCTIONAL)
cvode_mem = CVodeCreate(c_stepping, 1); // Functional iteration
else
cvode_mem = CVodeCreate(c_stepping, 2); // Newton interation
if(check_flag((void *)cvode_mem, "CVodeCreate", 0)) return(NULL);
flag = CVodeInit(cvode_mem, ode, 0, y);
if(check_flag(&flag, "CVodeInit", 1)) return(NULL);
// ****** Specify integration tolerances ******
flag = CVodeSStolerances(cvode_mem, c_reltol, c_abstol);
if(check_flag(&flag, "CVodeSStolerances", 1)) return(NULL);
// ****** Set up linear solver module if required ******
if(c_iteration==CV_DENSE_USER)
{
printf("Dense user supplied Jacobian\n");
// Dense user-supplied Jacobian
flag = CVDense(cvode_mem, 2);
if(check_flag(&flag, "CVDense", 1)) return(NULL);
flag = CVDlsSetDenseJacFn(cvode_mem, jac);
if(check_flag(&flag, "CVDlsSetDenseJacFn", 1)) return(NULL);
}
else if(c_iteration==CV_DENSE_DQ)
{
// Dense difference quotient Jacobian
flag = CVDlsSetDenseJacFn(cvode_mem, NULL);
if(check_flag(&flag, "CVDlsSetDenseJacFn", 1)) return(NULL);
}
// Set optional inputs
flag = CVodeSetUserData(cvode_mem, c_userdata);
if(check_flag(&flag, "CVodeSetUserData", 1)) return(NULL);
// Attach linear solver module
// Specify rootfinding problem
if(c_roots!=ROOTS_OFF)
{
flag = CVodeRootInit(cvode_mem, 1, root_func);
}
return cvode_mem;
}
研究
Chrome选项列表:https://peter.sh/experiments/chromium-command-line-switches/
许多帖子中的一篇解释了如何做无头铬:Selenium - chrome Driver fail to start in background (without a start-up window)
如何隐藏chromedriver app图标?我是否可以设置镀铬选项,除了设置无头' chrome选项?这是一个需要在后台运行chromedriver的操作系统设置吗?我能够成功地在无头模式下运行多个chromedrivers,但是不要在Dock或应用程序托盘中显示chrome图标,类似于phantomjs不会启动应用程序图标。
^在上面的图片中,那些是在无头模式下运行的chromedrivers在我的Dock中显示,理想情况下我的程序我甚至不想显示这些图标,因为它无论如何都是后台处理。
答案 0 :(得分:1)
更新(这对我来说至少在我的Mac上隐藏了chromedriver图标):
我无法找到Chrome Option
来隐藏出现在停靠栏中的chromedriver
图标。但是,我能够编辑Chrome的Info.plist文件,作为我的程序的一部分,以便使用LSBackgroundOnly
密钥来隐藏chromedriver图标。
在Chrome的Info.plist中,我以编程方式输入了:
<key>LSBackgroundOnly</key>
<string>1</string>
在我的Mac上使用python3代码我使用os.system
执行终端命令,使用defaults
在程序执行时输入LSBackgroundOnly key
,然后在程序执行结束时删除来自Info.plist的LSBackgroundOnly key
。
喜欢这个:
1)
defaults write /Applications/Google\ Chrome.app/Contents/Info.plist LSBackgroundOnly -string '1'
2)
defaults delete /Applications/Google\ Chrome.app/Contents/Info.plist LSBackgroundOnly
AS INFO:这很棘手,因为如果在程序执行期间没有正确添加/删除LSBackgroundOn,您的普通Chrome应用可能会以后台模式启动。根据我的经验,在最糟糕的情况下,您可能需要从Info.plist文件中手动删除LSBackgroundOnly,然后重新启动计算机以使Chrome退出后台模式。
我在程序执行后从程序中的Info.plist文件中删除了LSBackgroundOnly键,因为只有在启动chromedrivers时才需要将键放在文件中。之后,我希望能够使用常规Chrome应用,而不会在后台模式下打开它。但是,如果您了解程序执行并处理异常,这肯定会正确隐藏图标,并且使用常规Chrome应用程序没有任何不同。
快乐的黑客攻击。
答案 1 :(得分:0)
使用Selenium
无法做到这一点。我真的不明白你为什么要这样做。是否有真正的目的,或者只是你不希望它展示?即使Chrome应用在Dock上显示,在无头模式下也能正常运行。
但是,如果您希望打开时图标不会出现在Dock中,则需要通过修改该应用程序的Info.plist
文件来禁用它。
在您的Info.plist
Chrome浏览器中,添加此
<key>LSUIElement</key>
<true/>
这可以防止您的应用图标在工作时出现在停靠栏中。我很久以前就发现了这一点,this就是我看到它的帖子。
PS - 我还没有为Chrome应用测试它。请自担风险。