我正在用 python 编写一个 Web 自动化程序。这里有隐藏 geckodriver 的方法吗?这样当我启动程序时控制台(见图)就不会出现。
这是我的一小部分代码:
from selenium import webdriver
from selenium import *
from selenium.webdriver.common.by import By
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC`
driver=webdriver.Firefox()
wait=WebDriverWait(driver,120)
url = r"http://google.com"
driver.get(url) #This line starts the console (see picture)
要防止 geckodriver 显示任何窗口,您需要传递
-headless
参数:
from selenium import webdriver
options = webdriver.FirefoxOptions()
options.add_argument('-headless')
driver = webdriver.Firefox(options=options)
driver.get('https://www.example.com')
...
driver.quit()
这在 C# 中对我有用。它同时阻止了 geckodriver 和 firefox 窗口
FirefoxOptions f = new FirefoxOptions();
f.AddArgument("-headless");
var ffds = FirefoxDriverService.CreateDefaultService();
ffds.HideCommandPromptWindow = true;
driver = new FirefoxDriver(ffds,f);
在实施PyVirtualDisplay
后我能够做到这一点sudo pip install pyvirtualdisplay # Install it into your Virtual Environment
然后按如下方式导入Display:
from pyvirtualdisplay import Display
然后,在抓取之前,启动虚拟显示如下:
# initiate virtual display with 'visible=0' activated
# this way you will hide the browser
display = Display(visible=0, size=(800, 600))
# Start Display
display.start()
...
# Do your fetching/scrapping
...
# Stop Display
display.stop()
希望对你有帮助
这里是解决我的问题的方法。我使用了@thekingofravens 的建议,但意识到创建他在帖子中提到的 Run.bat 文件就足够了。以前我用 F5 在 IDLE 中运行我的程序。因此,Geckodriver 每隔几秒就会弹出一次。
我的解决方案:我只是用相同的代码制作了 Run.bat 文件:
cd C:\PathToYourFileWhichIsCausingTheGeckodriverToPopUp
python FileWhichIsCausingTheGeckodriverToPopUp.py
就是这样。当你想运行你的代码时,只要启动这个文件,Geckodriver 就不会弹出。 (它在没有你编程的整个路径的情况下工作,Python 必须在 PATH 中。) 此外,您当然可以使用与上述相同的命令从命令行运行您的程序,而无需创建额外的 bat 文件。
你必须在这里处理一些事情:
from selenium import *
(在你的代码中)这样的不寻常的导入。wait=WebDriverWait(driver,120)
在您的代码块中没有使用。r
开关时记得使用单引号'...'
quit()
方法。indentation
时注意
Python
。http://www.google.com
,打印 Page Title
并退出驱动程序实例的最小代码。从 selenium 导入 webdriver
driver=webdriver.Firefox(executable_path=r'C:\Utility\BrowserDrivers\geckodriver.exe')
url = r'http://www.google.com'
driver.get(url)
print("Page Title is : %s" %driver.title)
driver.quit()
控制台输出:
Page Title is : Google
所以我找到了一个非常通用的解决方法来解决 Windows 上的这个问题(在 Linux 中它首先似乎不是问题,不能代表 OSX)。
所以你需要制作三个文件,很尴尬。
首先,你制作一个文件。将其命名为start.bat(或任何东西)并将以下代码放入其中:
wscript.exe "C:\Wherever\invisible.vbs" "C:\Some Other Place\Run.bat"
这将是顶级批处理脚本。当它启动 visual basic 脚本并将批处理脚本作为参数传递时,它会在一瞬间可见。这样做的目的是让下一个控制台不可见。接下来我们制作 VBscript,invisible.vbs:
CreateObject("Wscript.Shell").Run """" & WScript.Arguments(0) & """", 0, False
最后,我们制作invisible.vbs应该隐藏的脚本,我们可以称之为Run.bat
cd C:\Wherever
python script_using_geckodriver.py
发生的事情如下:
附言所有这些都与 PyInstaller 一起工作,以生成用户只需单击即可的单个可再分发程序包。
感谢 harrymc @ superuser.com 提供此解决方案,这是我在尝试解决一个不相关的问题时发现的。我测试并意识到它可以交叉适用于此。 https://superuser.com/questions/62525/run-a-batch-file-in-a-completely-hidden-way
所以这不是一个完整的解决方案,但您可以通过缩小 geckodriver 命令窗口和/或将其放在不那么麻烦的地方来减轻 geckodriver 命令窗口的干扰。为此,打开一个命令窗口,右键单击顶部栏,左键单击默认值,然后转到“布局”选项卡。从那里,您可以设置默认大小位置。