使用Headless Chrome Webdriver运行Selenium

时间:2018-12-06 18:00:10

标签: python selenium google-chrome selenium-chromedriver google-chrome-headless

所以我正在尝试硒的一些东西,我真的希望它能很快。

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

首先,这种假设是正确的,还是如果我使用无头驱动程序运行脚本没关系吗?

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

How to configure ChromeDriver to initiate Chrome browser in Headless mode through Selenium?

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

感谢任何小费。

6 个答案:

答案 0 :(得分:7)

安装并运行容器化的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')

答案 1 :(得分:6)

要运行无头chrome,只需通过--headless添加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(chrome_options=chrome_options)

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

# b'<!DOCTYPE html><html xmlns="http://www....

  

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

请尝试使用--disable-extensions--disable-gpu之类的Chrome选项并对其进行基准测试,但我认为并没有太大的改进。


参考:headless-chrome

  

注意:从今天起,无头运行chrome时,您添加--disable-gpu标志,如果   您正在Windows上运行。参见crbug.com/737678

答案 2 :(得分:0)

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

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

答案 3 :(得分:0)

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一起使用。

答案 4 :(得分:0)

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)
    

答案 5 :(得分:0)

一旦您安装了硒和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)