繁体   English   中英

如何配置 ChromeDriver 以通过 Selenium 在 Headless 模式下启动 Chrome 浏览器?

[英]How to configure ChromeDriver to initiate Chrome browser in Headless mode through Selenium?

我正在编写一个用于网络抓取的 python 脚本,并且已经走上了使用 Chromedriver 作为软件包之一的道路。 我希望它在没有任何弹出窗口的情况下在后台运行。 我在 chromedriver 上使用了“headless”选项,它似乎在不显示浏览器窗口方面完成了这项工作,但是,我仍然看到 .exe 文件正在运行。 请参阅我正在谈论的屏幕截图。 截图

这是我用来启动 ChromeDriver 的代码:

options = webdriver.ChromeOptions()
options.add_experimental_option("excludeSwitches",["ignore-certificate-errors"])
options.add_argument('headless')
options.add_argument('window-size=0x0')
chrome_driver_path = "C:\Python27\Scripts\chromedriver.exe"

我试图做的事情是将选项中的窗口大小更改为 0x0,但我不确定是否做了任何事情,因为 .exe 文件仍然弹出。

关于我如何做到这一点的任何想法?

我正在使用 Python 2.7 仅供参考

它应该是这样的:

from selenium import webdriver
from selenium.webdriver.chrome.options import Options

options = Options()
options.add_argument('--headless')
options.add_argument('--disable-gpu')  # Last I checked this was necessary.
driver = webdriver.Chrome(CHROMEDRIVER_PATH, chrome_options=options)

这对我使用 Python 3.6 有效,我相信它也适用于 2.7。

2018-10-26 更新:这些天你可以这样做:

from selenium import webdriver
from selenium.webdriver.chrome.options import Options

options = Options()
options.headless = True
driver = webdriver.Chrome(CHROMEDRIVER_PATH, options=options)

2018 年 10 月 13 日的答复更新

现在,要使用Selenium驱动的ChromeDriver启动浏览上下文,您只需通过Options()类的实例将--headless属性设置为true ,如下所示:

  • 有效代码块:

     from selenium import webdriver from selenium.webdriver.chrome.options import Options options = Options() options.headless = True driver = webdriver.Chrome(options=options, executable_path=r'C:\\path\\to\\chromedriver.exe') driver.get("http://google.com/") print ("Headless Chrome Initialized") driver.quit()

2018 年 4 月 23 日的答复更新

随着方法set_headless(headless=True)的可用性,以编程方式以模式调用变得更加容易,如下所示:

  • 文件:

     set_headless(headless=True) Sets the headless argument Args: headless: boolean value indicating to set the headless option
  • 示例代码:

     from selenium import webdriver from selenium.webdriver.chrome.options import Options options = Options() options.set_headless(headless=True) driver = webdriver.Chrome(options=options, executable_path=r'C:\\path\\to\\chromedriver.exe') driver.get("http://google.com/") print ("Headless Chrome Initialized") driver.quit()

注意:-- --disable-gpu参数是在内部实现的。


2018 年 3 月 30 日的原始答案

Headless模式下使用Selenium Client 3.11.xChromeDriver v2.38Google Chrome v65.0.3325.181 时,您必须考虑以下几点:

  • 您需要添加参数--headless以在无头模式下调用 Chrome。

  • 对于Windows 操作系统系统,您需要添加参数--disable-gpu

  • 根据Headless:Linux 系统MacOS不需要使 --disable-gpu 标志不必要--disable-gpu标志。

  • 根据SwiftShader 在无头模式下在 Windows 上的断言失败--disable-gpu标志在Windows 系统上也将变得不必要。

  • 最大化Viewport需要参数start-maximized

  • 这是有关Viewport详细信息的链接。

  • 您可能需要添加参数--no-sandbox以绕过操作系统安全模型。

  • 有效的代码块:

     from selenium import webdriver from selenium.webdriver.chrome.options import Options options = Options() options.add_argument("--headless") # Runs Chrome in headless mode. options.add_argument('--no-sandbox') # Bypass OS security model options.add_argument('--disable-gpu') # applicable to windows os only options.add_argument('start-maximized') # options.add_argument('disable-infobars') options.add_argument("--disable-extensions") driver = webdriver.Chrome(chrome_options=options, executable_path=r'C:\\path\\to\\chromedriver.exe') driver.get("http://google.com/") print ("Headless Chrome Initialized on Windows OS")
  • 有效的代码块:

     from selenium import webdriver from selenium.webdriver.chrome.options import Options options = Options() options.add_argument("--headless") # Runs Chrome in headless mode. options.add_argument('--no-sandbox') # # Bypass OS security model options.add_argument('start-maximized') options.add_argument('disable-infobars') options.add_argument("--disable-extensions") driver = webdriver.Chrome(chrome_options=options, executable_path='/path/to/chromedriver') driver.get("http://google.com/") print ("Headless Chrome Initialized on Linux OS")

奥特罗

如何使用python在Selenium中以编程方式使firefox无头?


tl; 博士

这是沙盒故事的链接。

2020 年 8 月 20 日更新——现在很简单!

chrome_options = webdriver.ChromeOptions()
chrome_options.headless = True

self.driver = webdriver.Chrome(
            executable_path=DRIVER_PATH, chrome_options=chrome_options)

更新在我的情况下工作正常:

from selenium import webdriver

options = webdriver.ChromeOptions()
options.headless = True
driver = webdriver.Chrome(CHROMEDRIVER_PATH, options=options)

2020 年刚刚更改。对我来说很好用。

所以在更正我的代码后:

options = webdriver.ChromeOptions()
options.add_experimental_option("excludeSwitches",["ignore-certificate-errors"])
options.add_argument('--disable-gpu')
options.add_argument('--headless')
chrome_driver_path = "C:\Python27\Scripts\chromedriver.exe"

运行脚本时 .exe 文件仍然出现。 尽管这确实消除了一些告诉我“无法启动 GPU 进程”的额外输出。

最终的工作是使用 .bat 文件运行我的 Python 脚本

所以基本上,

  1. 如果是文件夹,则保存python脚本
  2. 打开文本编辑器,并转储以下代码(当然编辑到您的脚本)

    c:\\python27\\python.exe c:\\SampleFolder\\ThisIsMyScript.py %*

  3. 保存 .txt 文件并将扩展名更改为 .bat

  4. 双击它运行文件

所以这只是在命令提示符中打开了脚本,ChromeDriver 似乎在这个窗口中运行,而没有弹出到我的屏幕前面,从而解决了问题。

  1. .exe 无论如何都会运行。 根据谷歌 - “以无头模式运行,即没有 UI 或显示服务器依赖项。”

  2. 最好在命令行参数前加上 2 个破折号,即options.add_argument('--headless')

  3. 在headless模式下,也建议禁用GPU,即options.add_argument('--disable-gpu')

尝试使用 ChromeDriverManager

from selenium import webdriver
from webdriver_manager.chrome import ChromeDriverManager 
from selenium.webdriver.chrome.options import Options
chrome_options = Options()
chrome_options.set_headless()
browser =webdriver.Chrome(ChromeDriverManager().install(),chrome_options=chrome_options)
browser.get('https://google.com')
# capture the screen
browser.get_screenshot_as_file("capture.png")
  
from chromedriver_py import binary_path
 
 
chrome_options = webdriver.ChromeOptions()
   chrome_options.add_argument('--headless')
   chrome_options.add_argument('--no-sandbox')
   chrome_options.add_argument('--disable-gpu')
   chrome_options.add_argument('--window-size=1280x1696')
   chrome_options.add_argument('--user-data-dir=/tmp/user-data')
   chrome_options.add_argument('--hide-scrollbars')
   chrome_options.add_argument('--enable-logging')
   chrome_options.add_argument('--log-level=0')
   chrome_options.add_argument('--v=99')
   chrome_options.add_argument('--single-process')
   chrome_options.add_argument('--data-path=/tmp/data-path')
   chrome_options.add_argument('--ignore-certificate-errors')
   chrome_options.add_argument('--homedir=/tmp')
   chrome_options.add_argument('--disk-cache-dir=/tmp/cache-dir')
   chrome_options.add_argument('user-agent=Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/61.0.3163.100 Safari/537.36')
   
  driver = webdriver.Chrome(executable_path = binary_path,options=chrome_options)

上述解决方案不适用于具有 cloudflare 保护的网站,例如: https://paxful.com/fr/buy-bitcoin ://paxful.com/fr/buy-bitcoin。

修改代理如下:options.add_argument("user-agent=Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/84.0.4147.125 Safari/537.36")

修复在此处找到: 通过 Selenium Python 在正常/无头模式下使用 ChromeDriver/Chrome 访问 Cloudflare 网站有什么区别

2021 年 8 月更新:

最快的方法可能是:

from selenium import webdriver  

options = webdriver.ChromeOptions()
options.set_headless = True
driver = webdriver.Chrome(options=options)

options.headless = True已弃用。

chromeoptions=add_argument("--no-sandbox");
add_argument("--ignore-certificate-errors");
add_argument("--disable-dev-shm-usage'")

不是受支持的浏览器

解决方法:

Open Browser    ${event_url}    ${BROWSER}   options=add_argument("--no-sandbox"); add_argument("--ignore-certificate-errors"); add_argument("--disable-dev-shm-usage'")

不要忘记在${BROWSER}选项之间添加空格

System.setProperty("webdriver.chrome.driver",
         "D:\\Lib\\chrome_driver_latest\\chromedriver_win32\\chromedriver.exe");
ChromeOptions chromeOptions = new ChromeOptions();
chromeOptions.addArguments("--allow-running-insecure-content");
chromeOptions.addArguments("--window-size=1920x1080");
chromeOptions.addArguments("--disable-gpu"); 
chromeOptions.setHeadless(true);
ChromeDriver driver = new ChromeDriver(chromeOptions);

在 Selenium 4 的 alpha 和 beta 版本中,有一个选项可以隐藏 chromeDriver.exe 窗口。

from selenium import webdriver
from selenium.webdriver.chrome.service import Service as ChromeService # Similar thing for firefox also!
from subprocess import CREATE_NO_WINDOW # This flag will only be available in windows
chrome_service = ChromeService('chromedriver', creationflags=CREATE_NO_WINDOW)
driver = webdriver.Chrome(service=chrome_service) # No longer console window opened, niether will chromedriver output

您可以从这里查看 要 pip install beta 或 alpha 版本,您可以执行“pip install selenium==4.0.0.a7”或“pip install selenium==4.0.0.b4”(a7 表示 alpha-7,b4 表示 beta-4,因此对于你想要的其他版本,你可以修改命令。)要在 python 中导入特定版本的库,你可以查看这里

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM