Python Selenium:如何隐藏 geckodriver?

问题描述 投票:0回答:7

我正在用 python 编写一个 Web 自动化程序。这里有隐藏 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)
python-3.x selenium selenium-webdriver geckodriver
7个回答
3
投票

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

2
投票

这在 C# 中对我有用。它同时阻止了 geckodriver 和 firefox 窗口

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

1
投票

在实施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()

希望对你有帮助


1
投票

这里是解决我的问题的方法。我使用了@thekingofravens 的建议,但意识到创建他在帖子中提到的 Run.bat 文件就足够了。以前我用 F5 在 IDLE 中运行我的程序。因此,Geckodriver 每隔几秒就会弹出一次。

我的解决方案:我只是用相同的代码制作了 Run.bat 文件:

cd C:\PathToYourFileWhichIsCausingTheGeckodriverToPopUp 
python FileWhichIsCausingTheGeckodriverToPopUp.py

就是这样。当你想运行你的代码时,只要启动这个文件,Geckodriver 就不会弹出。 (它在没有你编程的整个路径的情况下工作,Python 必须在 PATH 中。) 此外,您当然可以使用与上述相同的命令从命令行运行您的程序,而无需创建额外的 bat 文件。


0
投票

你必须在这里处理一些事情:

  1. 保留有用的导入。必须避免像
    from selenium import *
    (在你的代码中)这样的不寻常的导入。
  2. 保持你的代码最少。
    wait=WebDriverWait(driver,120)
    在您的代码块中没有使用。
  3. 当你使用原始
    r
    开关时记得使用单引号
    '...'
  4. 如果你初始化webdriver实例记得调用
    quit()
    方法。
  5. 使用indentation
    时注意
    Python
  6. 这是使用 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

0
投票

所以我找到了一个非常通用的解决方法来解决 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
  2. invisible.vbs 启动第二个 .bat 文件而不在屏幕上显示它。
  3. 第二个 .bat 文件然后启动 python 程序。 Python(和 geckodriver)输出到不可见的 cmd,因此隐藏了 geckodriver 控制台窗口。

附言所有这些都与 PyInstaller 一起工作,以生成用户只需单击即可的单个可再分发程序包。

感谢 harrymc @ superuser.com 提供此解决方案,这是我在尝试解决一个不相关的问题时发现的。我测试并意识到它可以交叉适用于此。 https://superuser.com/questions/62525/run-a-batch-file-in-a-completely-hidden-way


0
投票

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

© www.soinside.com 2019 - 2024. All rights reserved.