📜  无头 chrome python (1)

📅  最后修改于: 2023-12-03 15:40:06.521000             🧑  作者: Mango

无头 Chrome 在 Python 中的应用

什么是无头 Chrome?

无头 Chrome 是 Google Chrome 浏览器的一个版本,它不需要图形界面,因此可以在后台运行。它通常用于自动化浏览器操作、网站截图、无人值守测试自动化等场景。

为什么要在 Python 中使用无头 Chrome?

Python 是一种流行的编程语言,有很多强大的库和框架。在 Python 中使用无头 Chrome 可以方便地实现自动化测试、数据爬取、截图、Web 自动化等任务。

如何在 Python 中使用无头 Chrome?

在 Python 中使用无头 Chrome 需要安装 seleniumchromedriver

安装 selenium

!pip install selenium

安装 chromedriver

下载地址:https://sites.google.com/a/chromium.org/chromedriver/downloads

安装完后,将 chromedriver 的路径添加到系统环境变量中,或者在代码中指定路径:

from selenium.webdriver import Chrome, ChromeOptions

chrome_options = ChromeOptions()
chrome_options.add_argument('--headless')
chrome_options.add_argument('--disable-gpu')
chrome_options.add_argument('--no-sandbox')

driver = Chrome(executable_path='/path/to/chromedriver', options=chrome_options)

上述代码会启动一个无头 Chrome 实例,可以在代码中模拟浏览器操作、获取页面信息等。

无头 Chrome 的常见应用场景
自动化测试
def test_login():
    driver.get('https://example.com/login')
    driver.find_element_by_name('username').send_keys('testuser')
    driver.find_element_by_name('password').send_keys('testpass')
    driver.find_element_by_id('login-btn').click()
    assert 'dashboard' in driver.current_url

test_login()
数据爬取
def scrape_quotes():
    driver.get('https://quotes.toscrape.com/js/')

    quotes = []
    while True:
        for quote in driver.find_elements_by_css_selector('.quote'):
            quotes.append({
                'text': quote.find_element_by_css_selector('.text').text,
                'author': quote.find_element_by_css_selector('.author').text,
                'tags': [tag.text for tag in quote.find_elements_by_css_selector('.tag')],
            })

        if not driver.find_elements_by_css_selector('.next'):
            break

        driver.find_element_by_css_selector('.next').click()

    return quotes

scrape_quotes()
截图
def screenshot_google():
    driver.get('https://google.com/')
    driver.save_screenshot('google.png')

screenshot_google()
Web 自动化
def automate_gmail():
    driver.get('https://mail.google.com/')

    driver.find_element_by_name('identifier').send_keys('testuser')
    driver.find_element_by_id('identifierNext').click()

    WebDriverWait(driver, 10).until(
        EC.presence_of_element_located((By.NAME, 'password'))
    )

    driver.find_element_by_name('password').send_keys('testpass')
    driver.find_element_by_id('passwordNext').click()

    WebDriverWait(driver, 10).until(
        EC.presence_of_element_located((By.CSS_SELECTOR, 'div[aria-label="Compose"]'))
    )

    driver.find_element_by_css_selector('div[aria-label="Compose"]').click()

automate_gmail()
总结

无头 Chrome 在 Python 中的应用范围很广,可以方便地实现自动化测试、数据爬取、截图、Web 自动化等任务。需要注意的是,无头 Chrome 是一个完整的浏览器运行环境,因此消耗的资源比较大。在使用时要注意内存和 CPU 的使用情况。