指定したサイトのスクリーンショットやテキスト要素を取得するライブラリ。
- screenshot
- get_text
- Chrome (headless-chromiumでもよい)
- Lambdaで
serverless-chrome
を使う場合はバージョンの組合せに注意 - Macに
Google Chrome Canary
をhomebrew
でインストール
- Lambdaで
# install
brew install Caskroom/versions/google-chrome-canary
# install 確認
/Applications/Google\ Chrome\ Canary.app/Contents/MacOS/Google\ Chrome\ Canary --version
- ChromeDriver
- ダウンロードして配置
# install 確認
/usr/local/bin/chromedriver -v
※ scripts/install.sh
も参照
Environmental variables
.env
ファイルに書いてproject rootに配置。.env_sample
をコピーすると楽。
CHROME_BINARY_LOCATION='/Applications/Google Chrome Canary.app/Contents/MacOS/Google Chrome Canary'
CHROME_DRIVER_LOCATION='/usr/local/bin/chromedriver'
Install
pip install git+https://github.com/mozkzki/moz-screenshot
# upgrade
pip install --upgrade git+https://github.com/mozkzki/moz-screenshot
# uninstall
pip uninstall moz-screenshot
Coding
Yahoo天気予報がscreenshot.pngに保存される。
from moz_screenshot import screenshot
screenshot(
"https://weather.yahoo.co.jp/weather/jp/13/4410.html",
"//div[@class='forecastCity']/table/tbody/tr/td/div",
out_file="./screenshot.png",
)
from moz_screenshot import get_text
text = get_text(
"https://weather.yahoo.co.jp/weather/jp/13/4410.html",
"//div[@class='forecastCity']/table/tbody/tr/td/div/table/tbody/tr[2]/td[3]",
)
print(text)
base project: mozkzki/moz-sample
poetry install
poetry shell
python ./examples/example.py
# or
make start
test all.
pytest
pytest -v # verbose
pytest -s # show standard output (same --capture=no)
pytest -ra # show summary (exclude passed test)
pytest -rA # show summary (include passed test)
with filter.
pytest -k app
pytest -k test_app.py
pytest -k my
specified marker.
pytest -m 'slow'
pytest -m 'not slow'
make coverage report.
pytest -v --capture=no --cov-config .coveragerc --cov=src --cov-report=xml --cov-report=term-missing .
# or
make ut
flake8 --max-line-length=100 --ignore=E203,W503 ./src
# or
make lint
make doc
dependabot (GitHub公式) がプルリクを挙げてくるので確認してマージする。
- 最低でもCircleCIが通っているかは確認
- CircleCIでは、最新の依存モジュールでtestするため
poetry update
してからtestしている - dependabotは
pyproject.toml
とpoetry.lock
を更新してくれる
serverless-chrome
とchromedriver
をLambda Layerに上げる必要あり(参照)- フォントがないと文字化けする
Chrome を AWS Lambda で動作させる場合に利用できる。
- 最新のバージョンは1.0.0-55だが動かない
- 以下の組み合わで動確している(参考)
- severless-chrome==1.0.0-37 (64.0.3282.167 stable channel)
- chromedriver==2.37
- selenium==3.141.0
Lambda Layerではchrome等が/opt/に配置される。
.env
は下記のようにする。
CHROME_BINARY_LOCATION='/opt/headless/python/bin/headless-chromium'
CHROME_DRIVER_LOCATION='/opt/headless/python/bin/chromedriver'