Python selenium :如何隐藏geckodriver?

nafvub8i  于 2023-03-24  发布在  Python
关注(0)|答案(7)|浏览(193)

我正在用python写一个网页自动化程序。这里有没有一个隐藏geckodriver的方法?这样当我启动程序时,控制台(见图)就不会显示出来了。
console of 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)
kt06eoxx

kt06eoxx1#

这在C#中对我很有效,它可以阻止geckodriver和firefox窗口

FirefoxOptions f = new FirefoxOptions();
                f.AddArgument("-headless");                    
                var ffds = FirefoxDriverService.CreateDefaultService();
                ffds.HideCommandPromptWindow = true;
                driver = new FirefoxDriver(ffds,f);
xzabzqsa

xzabzqsa2#

我实现了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()

希望能有所帮助

yqkkidmi

yqkkidmi3#

在这里的方法已经解决了它在我的情况下.我用@thekingofravens的建议,但意识到这是刚刚够创建Run.bat文件,他在他的帖子中提到.以前我运行我的程序在空闲与F5.因为这个Geckodriver弹出每隔几秒钟.
我的解决方案:我只是用相同的代码创建了Run.bat文件:

cd C:\PathToYourFileWhichIsCausingTheGeckodriverToPopUp 
python FileWhichIsCausingTheGeckodriverToPopUp.py

就是这样。当你想运行代码的时候,只要启动这个文件,Geckodriver就不会弹出。(它不需要你的程序的完整路径,Python必须在PATH中。)当然,你也可以从命令行用上面的命令运行你的程序,而不需要创建额外的bat文件。

l3zydbqr

l3zydbqr4#

你得处理好几件事
1.保留有用的导入。必须避免像from selenium import *(在代码中)这样的不寻常的导入。
1.保持代码最小化。wait=WebDriverWait(driver,120)在代码块中没有使用。
1.使用原始r开关时,请记住使用单引号'...'
1.如果初始化webdriver示例,记得调用**quit()方法。
1.使用Python时,请注意
indentation
1.下面是使用geckodriver打开url 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
2skhul33

2skhul335#

所以我找到了一个非常通用的解决方法来解决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

发生的情况如下:
1.第一个.bat文件启动 invisible.vbs
1.invisible.vbs 启动第二个.bat文件,但不显示在屏幕上。
1.然后第二个.bat文件启动python程序. Python(和geckodriver)输出到不可见的cmd,因此隐藏了geckodriver控制台窗口。
P.S.所有这些都与PyInstaller一起工作,以产生一个用户只需点击即可的可再分发包。
感谢superuser.com提供了这个解决方案,这是我在试图解决一个不相关的问题时发现的。我测试并意识到它可以交叉应用于此。https://superuser.com/questions/62525/run-a-batch-file-in-a-completely-hidden-way

mnemlml8

mnemlml86#

因此,这不是一个完整的解决方案,但您可以通过使其更小和/或将其放在不那么麻烦的地方来减轻geckodriver命令窗口的干扰。为此,打开命令窗口,右键单击顶部栏,左键单击默认值,然后转到布局选项卡。在那里,您可以设置默认大小位置。

a8jjtwal

a8jjtwal7#

为了防止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()

相关问题