我正在研究一个用于网络搜索的python脚本,并且已经走上了使用Chromedriver作为其中一个软件包的道路。我希望这在没有任何弹出窗口的情况下在后台运行。我在chromedriver上使用'headless'选项,它似乎没有显示浏览器窗口,但是,我仍然看到.exe文件正在运行。看到我正在谈论的截图。 Screenshot
这是我用来启动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 FYI
答案 0 :(得分:55)
它应该是这样的:
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, chrome_options=options)
答案 1 :(得分:33)
使用 Selenium Client 3.11.x , ChromeDriver v2.38 和 Google Chrome v65.0.3325.181 在无头模式您必须考虑以下几点:
--headless
以无头模式调用Chrome。--disable-gpu
--disable-gpu
标记。--disable-gpu
标记, Windows系统上也不再需要。start-maximized
。
您可能需要添加参数 --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")
使用方法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
参数在内部实施。
要以无头模式调用Chrome浏览器,您现在可以通过--headless
类设置Options()
属性,如下所示:
示例代码:
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()
答案 2 :(得分:11)
from selenium.webdriver.support.ui import WebDriverWait
chrome_options = webdriver.ChromeOptions()
chrome_options.headless = True
self.driver = webdriver.Chrome(
executable_path=DRIVER_PATH, chrome_options=chrome_options)
答案 3 :(得分:4)
无论如何都会运行.exe。根据谷歌 - “无头模式运行,即没有UI或显示服务器依赖。”
更好地在命令行参数前加上2个破折号,即options.add_argument('--headless')
在无头模式下,还建议禁用GPU,即options.add_argument('--disable-gpu')
答案 4 :(得分:3)
所以在将我的代码更正为:
之后$ gradle -q foo
foo: config phase
TRACER xyz before if: pingServer1
TRACER ping before if: pingServer1
TRACER ping inside if: pingServer1
TRACER xyz before if: pingServer2
TRACER ping before if: pingServer2
TRACER ping inside if: pingServer2
groupPing: config phase
foo: exec phase first
foo: exec phase last
运行脚本时仍然会出现.exe文件。虽然这确实摆脱了一些额外的输出,告诉我“无法启动GPU进程”。
最终工作的是使用.bat文件运行我的Python脚本
基本上,
打开文本编辑器,然后转储以下代码(当然可以编辑脚本)
c:\ python27 \ python.exe c:\ SampleFolder \ ThisIsMyScript.py%*
保存.txt文件并将扩展名更改为.bat
所以这只是在命令提示符下打开了脚本,ChromeDriver似乎在这个窗口中运行而没有弹出到我的屏幕前面,从而解决了问题。
答案 5 :(得分:1)
已更新 在我的情况下,它可以正常工作:
from selenium import webdriver
options = webdriver.ChromeOptions()
options.headless = True
driver = webdriver.Chrome(CHROMEDRIVER_PATH, options=options)
在2020年发生了变化。对我来说很好。
答案 6 :(得分:0)
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)
答案 7 :(得分:0)
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}
个选项之间添加空格
答案 8 :(得分:0)
上述解决方案不适用于具有Cloudflare保护功能的网站,例如:https://paxful.com/fr/buy-bitcoin
。
按如下所示修改代理: options.add_argument(“ user-agent = Mozilla / 5.0(Windows NT 6.1; Win64; x64)AppleWebKit / 537.36(KHTML,Gecko一样)Chrome / 84.0.4147.125 Safari / 537.36”)
答案 9 :(得分:0)
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);
答案 10 :(得分:0)
在 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
您可以从 here 查看。要 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 中导入特定版本的库,您可以查看 here。