使用Headless Chrome Webdriver运行Selenium

Rhy*_*den 13 python selenium google-chrome selenium-chromedriver google-chrome-headless

所以我正在尝试一些硒处理方法,我真的希望它能很快。

所以我的想法是,使用无头的chrome运行它可以使我的脚本更快。

首先,该假设是正确的,还是如果我使用无头驱动程序运行脚本并不重要?

无论如何,我仍然希望它能够正常运行,但是我不知何故,我尝试了不同的方法,并且大多数人建议它可以如十月更新中所说的那样工作

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

但是当我尝试这样做时,我得到了奇怪的控制台输出,但它似乎仍然不起作用。

任何小费表示赞赏。

Ped*_*ito 26

要运行chrome-headless,只需添加--headlessvia chrome_options.add_argument,即:

from selenium import webdriver
from selenium.webdriver.chrome.options import Options
chrome_options = Options()
#chrome_options.add_argument("--disable-extensions")
#chrome_options.add_argument("--disable-gpu")
chrome_options.add_argument("--headless")
driver = webdriver.Chrome(options=chrome_options)

start_url = "https://duckgo.com"
driver.get(start_url)
print(driver.page_source.encode("utf-8"))
driver.quit()

# b'<!DOCTYPE html><html xmlns="http://www....
Run Code Online (Sandbox Code Playgroud)

所以我的想法是,使用无头的chrome运行它可以使我的脚本更快。

尝试使用诸如--disable-extensions或的chrome选项--disable-gpu并对其进行基准测试,但我认为不会有太多改进。


参考:无头铬

注意:从今天开始,当无头运行chrome时, 如果您在Windows上运行,则应包括--disable-gpu标志。参见crbug.com/737678

  • 建议现在使用 chrome_options.add_argument("--headless=new")` 以获得更好的体验:https://www.selenium.dev/blog/2023/headless-is-going-away/ (2认同)

Max*_*ysh 11

安装并运行容器化 Chrome:

docker pull selenium/standalone-chrome
docker run --rm -d -p 4444:4444 --shm-size=2g selenium/standalone-chrome
Run Code Online (Sandbox Code Playgroud)

连接使用webdriver.Remote

driver = webdriver.Remote('http://localhost:4444/wd/hub', DesiredCapabilities.CHROME)
driver.set_window_size(1280, 1024)
driver.get('https://www.google.com')
Run Code Online (Sandbox Code Playgroud)

  • 与 --headless 相比,它有什么优点? (9认同)
  • @GregWoods - 这是一个很好的解决方案,许多网站(包括使用“Cloudfare DNS”来检测机器人和爬虫的网站将在 Chrome 中看到“--headless”标志,并且会阻止您使用软件浏览该网站。使用 docker 容器,您可以绕过可能导致您被阻止的“--headless”标志。 (2认同)
  • @GregWoods 当您想在无桌面服务器上运行 Selenium 测试时,这也是一个很好的解决方案。在切换到此解决方案之前,我们只需在其中一台服务器上安装桌面,否则 Chrome 软件包甚至无法安装。现在我们可以在任何具有 Docker 环境的服务器上运行 Selenium 测试。 (2认同)
  • 这很棒,但需要一些调整才能与 selenium 4.15 配合使用。驱动程序现在应如下所示:`driver = webdriver.Remote("http://localhost:4444/wd/hub", options=webdriver.ChromeOptions())` (2认同)

Dev*_*dun 5

如果您使用的是 Linux 环境,可能还需要添加--no-sandbox特定的窗口大小设置。--no-sandbox如果正确设置用户容器,则 Windows 上不需要该标志。

使用--disable-gpu仅适用于Windows。其他平台不再需要它。该--disable-gpu标志是一些错误的临时解决方法。

//Headless chrome browser and configure
            WebDriverManager.chromedriver().setup();
            ChromeOptions chromeOptions = new ChromeOptions();
            chromeOptions.addArguments("--no-sandbox");
            chromeOptions.addArguments("--headless");
            chromeOptions.addArguments("disable-gpu");
//          chromeOptions.addArguments("window-size=1400,2100"); // Linux should be activate
            driver = new ChromeDriver(chromeOptions);
Run Code Online (Sandbox Code Playgroud)


Ser*_*hii 5

from time import sleep

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

chrome_options = Options()
chrome_options.add_argument("--headless")

driver = webdriver.Chrome(executable_path="./chromedriver", options=chrome_options)
url = "https://stackoverflow.com/questions/53657215/running-selenium-with-headless-chrome-webdriver"
driver.get(url)

sleep(5)

h1 = driver.find_element_by_xpath("//h1[@itemprop='name']").text
print(h1)
Run Code Online (Sandbox Code Playgroud)

然后我在我们的本地机器上运行脚本

? python script.py
Running Selenium with Headless Chrome Webdriver
Run Code Online (Sandbox Code Playgroud)

它正在工作,并且与无头 Chrome 一起使用。