【问题标题】:Python Selenium : How to hide geckodriver?Python Selenium:如何隐藏 geckodriver?
【发布时间】:2018-02-07 16:53:28
【问题描述】:

我正在用 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)

【问题讨论】:

  • 你想把它藏在哪里?在代码中?
  • 感谢您的回复。我只是想防止启动程序时出现geckodriver.exe的弹出(控制台)。
  • 好吧,据我所知,我还没有注意到这样的事情。只需将 geckodriver.exe 放到项目的文件夹位置即可。另一种方法是在代码中使用它。
  • 我只是添加了一张图片让事情更清楚
  • 您使用哪种语言?你从来没有提到过

标签: python-3.x selenium selenium-webdriver geckodriver


【解决方案1】:

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

【讨论】:

  • 很好的答案,唯一的问题是,它没有回答问题。这使得 firefox 隐藏而不是 geckodriver。
  • 在我的例子中(带有 Gnome 的 Ubuntu 18.10),这个参数隐藏了控制台和 Firefox 窗口。我看到问题中的屏幕截图建议使用 Windows,但这个答案可能对某人有用。
  • 它帮助了我。谢谢!
【解决方案2】:

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

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

【讨论】:

  • 这对我有帮助。但我也需要 python 方式!
【解决方案3】:

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

希望对你有帮助

【讨论】:

  • 非常感谢您的帮助。但是就没有别的办法了吗?因为 pyvirtualdisplay 处于非常早期的阶段(0.2.),所以我害怕这些错误。
  • 对我不起作用,出现很多错误。此外,问题是在 geckodriver.exe display not browser 上指定的,因为您可以使用 options = Options() options.add_argument('--headless') webdriver.Firefox(options=options) 隐藏浏览器
【解决方案4】:

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

  1. 保留有用的导入。必须避免像 from selenium import *(在您的代码中)这样的异常导入。
  2. 尽量减少代码。 wait=WebDriverWait(driver,120) 在您的代码块中没有任何用途。
  3. 当您使用原始r 开关时,请记住使用单引号'...'
  4. 如果您初始化 webdriver 实例,请记住调用 quit() 方法。
  5. 使用Python时请注意indentation。
  6. 这是使用 geckodriver 打开 url http://www.google.com,打印 Page Title 并退出驱动程序实例的最小代码。

从硒导入网络驱动程序

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

【讨论】:

  • 非常感谢您的建议,但^这只是我代码的一小部分(1500 行)。我还不得不更改网站名称(公司政策)。知道如何隐藏 geckodriver 吗?
  • @user8495738 当你运行我的代码块时,你看到 geckodriver 窗口了吗?
  • 虽然这包含一般有用的提示,但这并没有解决 OP 的问题。他想隐藏控制台窗口。
【解决方案5】:

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

【讨论】:

    【解决方案6】:

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

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

    cd C:\PathToYourFileWhichIsCausingTheGeckodriverToPopUp 
    python FileWhichIsCausingTheGeckodriverToPopUp.py
    

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2016-08-16
      • 1970-01-01
      • 1970-01-01
      • 2017-07-06
      • 2018-05-30
      • 2021-11-27
      • 2018-08-05
      相关资源
      最近更新 更多