Python 如何通过Selenium配置ChromeDriver以无头模式启动Chrome浏览器?

Python 如何通过Selenium配置ChromeDriver以无头模式启动Chrome浏览器?,python,selenium,selenium-webdriver,selenium-chromedriver,google-chrome-headless,google-chrome,headless,windows,linux,Python,Selenium,Selenium Webdriver,Selenium Chromedriver,Google Chrome Headless,Google Chrome,Headless,Windows,Linux,我正在编写一个用于web scrape的python脚本,并且已经开始使用Chromedriver作为其中一个包。我想这是在后台运行没有任何弹出窗口。我在chromedriver上使用了“headless”选项,它似乎可以不显示浏览器窗口,但是,我仍然看到.exe文件在运行。请看我所说内容的屏幕截图 这是我用来启动ChromeDriver的代码: options = webdriver.ChromeOptions() options.add_experimental_option("exclud

我正在编写一个用于web scrape的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供参考

  • .exe无论如何都会运行。根据谷歌的说法,“在无头模式下运行,即没有UI或显示服务器依赖项。”

  • 最好在命令行参数前面加两个破折号,即
    选项。添加参数('--headless')

  • 在无头模式下,也建议禁用GPU,即
    选项。添加_参数('--disable GPU')


  • 应该是这样的:

    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)
    
    这对我使用Python3.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)
    

    因此,在将我的代码更正为:

    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脚本

    所以基本上

  • 如果要保存文件夹,请保存python脚本
  • 打开文本编辑器,并转储以下代码(当然要编辑脚本)

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

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

  • 双击此按钮以运行该文件
  • 因此,这只是在命令提示符下打开了脚本,ChromeDriver似乎正在该窗口内运行,而没有弹出到我的屏幕前面,从而解决了问题。

    2018年10月13日的答案更新 要使用driven now启动浏览上下文,只需通过
    Options()
    类的实例将属性设置为
    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)
          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()
      
    注意:参数在内部实现


    2018年3月30日的原始答复 <>在使用SeleClient 3.11 .x、ChrimVelueV2.38和谷歌浏览器V65.0.33 25.181时,在<强>无头< /强>模式下,您必须考虑以下几点:

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

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

    • 根据
      ——Linux系统和MacOS上不需要禁用gpu
      标志

    • 根据
      ——禁用gpu
      标志在Windows系统上也将变得不必要

    • 最大化的视口需要参数
      开始最大化

    • 以下是有关详细信息的链接

    • 您可能需要添加参数
      --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")
      
    • 有效代码块:

      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")
      

    奥特罗


    tl;博士
    以下是该故事的链接。

    尝试使用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")
    
    更新日期:2020年8月20日——现在很简单! 不是受支持的浏览器

    解决方案:

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

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

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

    修改代理,如下所示: options.add_参数(“用户代理=Mozilla/5.0(Windows NT 6.1;Win64;x64)AppleWebKit/537.36(KHTML,类似Gecko)Chrome/84.0.4147.125 Safari/537.36”)

    在此处找到修复程序:

    更新 在我的情况下效果很好:

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

    2020年刚刚改变。对我来说很好。

    谢谢!不幸的是,这并没有解决问题。我已经发布了我对你所做事情的回答。感谢您的帮助最新更新在将:options=options()替换为options=webdriver时起作用。ChromeOptions()更新:kwarg
    chrome\u options
    对于chrome,不推荐使用
    options
    可能与@Basj重复此问题比您链接的问题早一年。如果有的话,链接的问题可能与此重复。这里需要再编辑一次使用
    chrome\u options=options
    not
    options=options
    另一个:使用
    options。添加参数(“--headless”)
    not
    options.headless=True
    @DebanjanB,当我使用你2018年10月13日的代码时,它会执行,但引发以下错误:“‘分析元元素内容时出错:’;’不是有效的键值对分隔符。请改用”“,”,“,”和
    “脚本只能关闭由它打开的窗口。”
    “主线程上的同步XMLHttpRequest已被弃用,因为它会对最终用户的体验造成有害影响…
    对于网站
    https://test.plexonline.com
    -带有“head”的浏览器执行时不会出现错误。。。有什么想法吗?@Python\u Learner\u DK竞争错误堆栈跟踪可能会给我们一些线索。你能在你的二进制版本中提出一个新问题吗?@Jortega,chrome\u options已经贬值,因此options=options是正确的。这些是需要设置的chrome选项
    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);
    
    from selenium import webdriver
    
    options = webdriver.ChromeOptions()
    options.headless = True
    driver = webdriver.Chrome(CHROMEDRIVER_PATH, options=options)