繁体   English   中英

使用 Headless Chrome Webdriver 运行 Selenium

[英]Running Selenium with Headless Chrome Webdriver

所以我正在用 selenium 尝试一些东西,我真的希望它快点。

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

首先,该假设是否正确,或者如果我使用无头驱动程序运行我的脚本是否无关紧要?

无论如何,我仍然想让它无头运行,但不知何故我做不到,我尝试了不同的东西,大多数人建议它会像 10 月更新中所说的那样工作

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

但是当我尝试这样做时,我得到了奇怪的控制台 output 并且它似乎仍然无法正常工作。

任何提示表示赞赏。

要运行 chrome-headless,只需通过chrome_options.add_argument --headless即:

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("--no-sandbox") # linux only
chrome_options.add_argument("--headless")
# chrome_options.headless = True # also works
driver = webdriver.Chrome(options=chrome_options)
start_url = "https://duckgo.com"
driver.get(start_url)
print(driver.page_source.encode("utf-8"))
# b'<!DOCTYPE html><html xmlns="http://www....
driver.quit()

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

尝试使用诸如--disable-extensions--disable-gpu之类的 chrome 选项并对其进行基准测试,但我不会指望有太大的改进。


参考: 无头镀铬

安装并运行容器化 Chrome:

docker pull selenium/standalone-chrome
docker run --rm -d -p 4444:4444 --shm-size=2g selenium/standalone-chrome

使用webdriver.Remote连接:

driver = webdriver.Remote('http://localhost:4444/wd/hub', DesiredCapabilities.CHROME)
driver.set_window_size(1280, 1024)
driver.get('https://www.google.com')
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)

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

➜ python script.py
Running Selenium with Headless Chrome Webdriver

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

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

仅在 Windows 上使用--disable-gpu 其他平台不再需要它。 --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);

一旦你安装了 selenium 和 web 驱动程序。 下面为我​​在 Linux 集群上使用无头 Chrome 工作:

from selenium import webdriver
options = webdriver.ChromeOptions()
options.add_argument("--headless")
options.add_argument("--disable-extensions")
options.add_argument("--disable-dev-shm-usage")
options.add_argument("--no-sandbox")
options.add_experimental_option("prefs",{"download.default_directory":"/databricks/driver"})
driver = webdriver.Chrome(chrome_options=options)

Todo(在无头服务器 Debian Linux 9.4 上测试):

  1. 做这个:

     # install chrome curl -sS -o - https://dl-ssl.google.com/linux/linux_signing_key.pub | apt-key add - echo "deb [arch=amd64] http://dl.google.com/linux/chrome/deb/ stable main" >> /etc/apt/sources.list.d/google-chrome.list apt-get -y update apt-get -y install google-chrome-stable # install chrome driver wget https://chromedriver.storage.googleapis.com/77.0.3865.40/chromedriver_linux64.zip unzip chromedriver_linux64.zip mv chromedriver /usr/bin/chromedriver chown root:root /usr/bin/chromedriver chmod +x /usr/bin/chromedriver
  2. 安装硒:

     pip install selenium

    并运行此 Python 代码:

     from selenium import webdriver from selenium.webdriver.chrome.options import Options options = Options() options.add_argument("no-sandbox") options.add_argument("headless") options.add_argument("start-maximized") options.add_argument("window-size=1900,1080"); driver = webdriver.Chrome(chrome_options=options, executable_path="/usr/bin/chromedriver") driver.get("https://www.example.com") html = driver.page_source print(html)
from selenium import webdriver
from selenium.webdriver.chrome.options import Options
chrome_options = Options()
chrome_options.add_argument("--headless")
driver = webdriver.Chrome(executable_path=r"C:\Program 
Files\Google\Chrome\Application\chromedriver.exe", options=chrome_options)

这对我来说没问题。

Chromium 开发人员最近添加了第二个无头模式(2021 年)。 https://bugs.chromium.org/p/chromium/issues/detail?id=706008#c38

--headless=chrome标志现在允许您在新的无头模式下获得 Chrome 的全部功能,您甚至可以在其中运行扩展程序。

用法:

options.add_argument("--headless=chrome")

如果某些东西在常规 Chrome 中有效,那么它现在也应该适用于较新的无头模式。

正如接受的答案所述:

options.add_argument("--headless")

这些技巧可能有助于加快处理速度,尤其是对于无头的情况:

有很多事情你可以在无头中做,而在非无头中不能做

由于您将使用 Chrome Headless,我发现添加它可以将 CPU 使用率降低约 20%(我在查看 htop 时发现这是一个 CPU 和 memory hog)

--disable-crash-reporter

这只会在您无头运行时禁用这可能会加快您的速度!!!

我目前的设置如下,我减少了大约 20% 的 CPU(但只是节省了边际时间):

options.add_argument("--no-sandbox");
options.add_argument("--disable-dev-shm-usage");
options.add_argument("--disable-renderer-backgrounding");
options.add_argument("--disable-background-timer-throttling");
options.add_argument("--disable-backgrounding-occluded-windows");
options.add_argument("--disable-client-side-phishing-detection");
options.add_argument("--disable-crash-reporter");
options.add_argument("--disable-oopr-debug-crash-dump");
options.add_argument("--no-crash-upload");
options.add_argument("--disable-gpu");
options.add_argument("--disable-extensions");
options.add_argument("--disable-low-res-tiling");
options.add_argument("--log-level=3");
options.add_argument("--silent");

我发现这是一个很好的命令行开关列表(我认为是完整列表),并附有解释: https://peter.sh/experiments/chromium-command-line-switches/

此处还提到了一些您可以关闭的其他功能: https://github.com/GoogleChrome/chrome-launcher/blob/main/docs/chrome-flags-for-tools.md

我希望这可以帮助别人

暂无
暂无

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

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