[英]How to initiate Chrome Canary in headless mode through Selenium and Python
[英]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)
现在,要使用Selenium驱动的ChromeDriver启动google-chrome-headless浏览上下文,您只需通过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()
随着方法set_headless(headless=True)
的可用性,以编程方式以无头模式调用google-chrome变得更加容易,如下所示:
文件:
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
参数是在内部实现的。
在Headless模式下使用Selenium Client 3.11.x 、 ChromeDriver v2.38和Google 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
以绕过操作系统安全模型。
有效的Windows代码块:
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")
有效的linux代码块:
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无头?
这是沙盒故事的链接。
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 脚本
所以基本上,
打开文本编辑器,并转储以下代码(当然编辑到您的脚本)
c:\\python27\\python.exe c:\\SampleFolder\\ThisIsMyScript.py %*
保存 .txt 文件并将扩展名更改为 .bat
所以这只是在命令提示符中打开了脚本,ChromeDriver 似乎在这个窗口中运行,而没有弹出到我的屏幕前面,从而解决了问题。
.exe 无论如何都会运行。 根据谷歌 - “以无头模式运行,即没有 UI 或显示服务器依赖项。”
最好在命令行参数前加上 2 个破折号,即options.add_argument('--headless')
在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 网站有什么区别
最快的方法可能是:
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.