Headless chrome에서 Selenium을 사용해 보았습니다.

이번에는 Selenium을 사용하여 Headless Chrome을 조작해 보겠습니다.

코드는 GitHub 에 정리했습니다.

추가


  • 8/9 병렬 실행 구현

  • 실행 환경


  • maxOS Sierra ver. 10.12.6
  • Python 3.6.1
  • Google 크롬 59.0

  • Headless Chrome이란?



    Google 크롬 59에서 도입된 Chrome을 화면 없이 작동하는 모드입니다. 이것에 의해, 자동 테스트나 UI가 없는 서버 환경에서 사용할 수 있다는 것.

    *Windows 전용 Chrome 60에서 지원되는 것 같습니다.

    준비


  • 최신 버전 Chrome 설치
  • Python 3.6 다운로드 (virtualenv를 사용하는 것이 좋습니다)
  • Selenium 등을 의존 라이브러리 설치

  • 파이썬 의존 라이브러리



    이번에는 다음 라이브러리를 사용합니다.

  • Selene - Selenide을 Python으로 구현하여 Selenium을 다루기 쉽습니다. *

  • 파이썬 webdriver manager - 브라우저 드라이버를 자동으로 설치하고 관리합니다 **
  • Selenium

  • joblib - 병렬화 실행에 사용

  • *아직 α 버전이므로 API가 변경될 수 있습니다.

    **설치된 드라이버는 기본적으로 ~/.wdm/이하에 저장됩니다

    종속 라이브러리 설치



    pre-release 최신 버전의 selene을 설치합니다.
    위의 라이브러리는 selene 설치시 동시에 들어갑니다.
    또, six는 왠지 의존하고 있는데 함께 들어가지 않았기 때문에 별도로 인스톨합니다.
    pip install selene --pre
    pip install six

    샘플 코드



    Google 검색을 수행하고 결과를 스크린 샷하는 간단한 방법입니다.

    sample_selene.py
    #!/usr/bin/env python
    # -*- coding: utf-8 -*-
    
    from selenium import webdriver
    from selenium.webdriver import Chrome
    from selenium.webdriver.chrome.options import Options
    from selenium.webdriver.common.keys import Keys
    from selene.driver import SeleneDriver
    from webdriver_manager.chrome import ChromeDriverManager
    
    # run chrome headless
    options = Options()
    options.add_argument('--headless')
    
    # install chromedriver if not found and start chrome
    driver = SeleneDriver.wrap(webdriver.Chrome(executable_path=ChromeDriverManager().install(), chrome_options=options))
    
    # search 'python' in google
    driver.get('https://www.google.co.jp/')
    input = driver.find_element_by_name('q')
    input.send_keys('Python')
    input.send_keys(Keys.RETURN)
    
    # save screen shot
    driver.save_screenshot('result.png')
    
    driver.quit()
    

    실행 결과는 다음과 같습니다.



    샘플 코드 병렬화



    sample_selene_parallel.py
    #!/usr/bin/env python
    # -*- coding: utf-8 -*-
    
    from selenium import webdriver
    from selenium.webdriver import Chrome
    from selenium.webdriver.chrome.options import Options
    from selenium.webdriver.common.keys import Keys
    from selene.driver import SeleneDriver
    from webdriver_manager.chrome import ChromeDriverManager
    from joblib import Parallel, delayed
    
    # search 'keyword' in google
    def google(url, keyword):
        # run chrome headless
        options = Options()
        options.add_argument('--headless')
        driver = SeleneDriver.wrap(webdriver.Chrome(executable_path=ChromeDriverManager().install(), chrome_options=options))
        driver.get(url)
        input = driver.find_element_by_name('q')
        input.send_keys(keyword)
        input.send_keys(Keys.RETURN)
    
        # save screen shot
        driver.save_screenshot(keyword + '.png')
    
        driver.quit()
    
    url = 'https://www.google.co.jp/'
    keywords = ['Python', 'Google', 'Selenium']
    
    # n_jobs=-1 means use all of the resources you can`
    Parallel(n_jobs=-1)(delayed(google)(url,keyword) for keyword in keywords)
    

    실행 결과는 다음과 같습니다. 파이썬의 결과는 할애.




    참고 링크


  • htps : //에서 ゔぇぺぺrs. 오, ぇ. 이 m / ぇ b / u p는 s / 2017/04 / 헤아 d ぇ s-ch 로메
  • htps : // 기주 b. 코 m / 야자 카 / 세이네
  • htps : // 기주 b. 코 m / 세르 게 y 피로 고 v / 우우 bd 리 ゔ ぇ r_ 마나게 r
  • ぃ tp // 코 m / 오가나 / ms / db4594113c04 8801 아 d
  • 좋은 웹페이지 즐겨찾기