pythonからchromeを操作する

pythonからchromeを操作する。

pythonでseleniumライブラリを利用することで、
ChromeやFirefoxを操作できるようだ。

Windows環境で試してみた。

pipでseleniumドライバーをインストール

1
python -m pip install selenium

ChromeのWebDriverをダウンロード

https://sites.google.com/a/chromium.org/chromedriver/downloads

zipファイルがダウンロードされ、解凍すると「chromedriver.exe」というファイルが1つ入っていた。
これを経由してChromeへアクセスするようだ。

pythonから呼び出し

準備(必須ではない)

chromedriver.exeが存在する場所にPATHを通す。
またはPATHが通っているディレクトリにchromedriver.exeを置く。

参考:この方法は必須ではない。
ドライバーのインスタンス生成時に、chromedriver.exeのフルパスを指定できるので、その方法を用いても良い。

pythonからchromeを利用する。

まずは、seleniumのwebdriverをインポート。

1
from selenium import webdriver

webdriverのインスタンスを生成する。

1
2
3
4
5
6
7
<h1>chromedriver.exeにPATHが通っている場合。</h1>
driver = webdriver.Chrome()
<h1>chromedriver.exeにPATHが通っていない場合。</h1>
path_to_chromedriver = 'C:/usr/chromedriver.exe'
driver = webdriver.Chrome(path_to_chromederiver)
<h1>または</h1>
driver = webdriver.Chrome(executable_path = path_to_chromedriver)

ここまで実行するとchromeが立ち上がる。
画面を非表示にしたい場合は、Optionを定義しヘッドレスモードで起動する。

1
2
3
4
5
6
7
8
9
<h1>ヘッドレスオプションの準備</h1>
options = webdriver.ChromeOptions()
options.add_argument('--headless')
<h1>インスタンス生成</h1>
driver = webdriver.Chrome(options = options)
<h1>または</h1>
driver = webdriver.Chrome(
    executable_path = path_to_chromedriver,
    options = options)

URLを開く

1
driver.get('https://www.yahoo.co.jp/')

HTMLを取得する

1
html = driver.page_source

スクリーンショットを保存する。

1
driver.save_screenshot('screenshot.png')

javascriptを実行して、結果を得る。

1
page_height = driver.execure_script('return document.body.scrollHeight')

ウインドウサイズを設定する。

1
driver.set_window_size(1280, 800)

終了処理

1
driver.quit()

これでChromeが閉じる。

まとめ

ひたすらスクリーンショットを取らなくてはならないときなど便利そうだ。

同じタグの記事
同じカテゴリの記事

Kotlinで$(ドルマーク)を出力する

Kotlinで$(ドルマーク)を出力する

Kotlinの文字列操作は便利だ。
ダブルクォーテーションの中で変数を直接展開することができる。

1
2
val amount = "100.00"
println("This ticket is $amount dollars.")

「100.00 dollars」を「$100.00」と出力したい。
そんなときは、

1
2
3
4
println("This ticket is ${'$'}$amount.")
println("This ticket is ${"$"}$amount.")
println("This ticket is ${'$' + amount}.")
println("This ticket is ${"$" + amount}.")

$を使って$を出力するようだ。
これで解決。

同じタグの記事
同じカテゴリの記事

html data-* 属性

html data-* 属性

今更だが、html5では任意のタグにdata-*属性を設定できる。
設定したdata属性は、簡単に取得することができる。

サンプルHTML

1
2
3
4
5
6
7
8
9
10
<!doctype html>
<html>
  <head>
    <meta charset="utf-8">
    <title>data attribute test</title>
  </head>
  <body>
    <span id="data1" data-my-test-data="hello world!">test data</span>
  </body>
</html>

サンプルスクリプト

data属性の値はdatasetを通じて取得することができる。

1
var myTestData = document.getElementById("data1").dataset.myTestData;

data属性の”data-“は取り除き、キャメルケースで指定すると取得できる。
しかし、この方法はChorme,Firefox,Edgeで成功したが、InternetExplorerでは、
ドキュメントモードがEdgeの場合にのみ動作した。
InternetExplorerがクライアントとして訪れるのであれば、datasetという新しい方法は用いずに、従来通りのgetAttributeを使う。

1
var myTestData = document.getElementById("data1").getAttribute("data-my-test-data");

name属性やclass属性を取得するのと同じく、ただ属性を取得しているだけなので、名称の変換などは行わずに指定する。

まとめ

data属性は便利だ。今まではキー情報などをtitle属性に設定してみたりしていたが、そうするとカーソルが当たった時など、その中身が見えてしまいデバッグはしやすいが、恥ずかしい場合もあった。
これで、いろいろ隠して設定できる。

同じタグの記事
同じカテゴリの記事

pyenvとvirtualenvでpython環境を構築

pyenvとvirtualenvでpython環境を構築

pyenvで複数のバージョンのpythonの切り替えが容易になった。
pyenvにvirtualenvプラグインをインストールすると、
pythonのバージョンごとの管理と、さらに同一バージョンでも、
pip環境を分けて管理できるようだ。
これで、依存性の切り分けが容易になる気がする。
pyenvにpyenv-virtualenvを追加する。

pyenvとvirtualenvのインストール

githubよりスクリプトをダウンロード(git clone)。

1
2
git clone https://github.com/pyenv/pyenv.git ~/.pyenv
git clone https://github.com/pyenv/pyenv-virtualenv.git ~/.pyenv/plugins/pyenv-virtualenv

.bash_profileを編集

1
2
3
4
5
vim ~/.bash_profile
export PYENV_ROOT=$HOME/.pyenv
export PATH_$PYENV_ROOT/bin:$PATH
eval "$(pyenv init -)"
eval "$(pyenv virtualenv-init -)"

編集した.bash_profileを読み込む。

1
. ~/.bash_profile

特定のバージョンのpythonをインストール。

ソースをビルドするので、結構時間がかかる。

1
pyenv install 3.6.6

バージョン3.6.6をインストール。

新しいバージョンのpythonをインストールしたときは、下記のコマンドを実行する。

1
pyenv rehash

インストールしたpythonのテスト環境を作成する。

1
pyenv virtualenv 3.6.6 test-3.6.6

バージョン3.6.6のテスト環境 test-3.6.6 を作成。

テスト環境ディレクトリを作成し、そのディレクトリにtest-3.6.6を割り当てる。

1
2
3
mkdir ~/test-3.6.6
cd ~/test-3.6.6
pyenv local test-3.6.6

ホームディレクトリのtest-3.6.6に移動すると、
test-3.6.6のpython環境が動作する。

pythonのバージョン、インストールされているパッケージを確認する。

1
2
python -V
pip freeze

pythonのバージョンは3.6.6、pipではまだ何もインストールされていない環境が作成される。
この環境でpipインストールすると、test-3.6.6にインストールされ、
3.6.6やその他の環境へはpipインストールが影響しない。

インストールしたtest-3.6.6のアンインストール

1
pyenv uninstall test-3.6.6

テスト環境のみ削除される。3.6.6環境はそのまま残るため、
新たにtest-3.6.6を瞬時に作成される。

まとめ

モジュールの依存関係が、ある程度見えてきそうだ。

同じタグの記事
同じカテゴリの記事

javaでファイルの更新日時を変更する

javaでファイルの更新日時を変更する

日次バッチでファイルを作成している。
何の為かはわからないが、ファイルの更新日時をファイル作成日の0時0分0秒にしなくてはならない。
javaバッチなので、その流れでファイルの更新日時も変更する。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
/**
 * javac -encoding utf-8 TestFileTime.java
 *
 * java -cp . TestFileTime2
 */

import java.util.Date;
import java.nio.file.Path;
import java.nio.file.Files;
import java.nio.file.Paths;
import java.nio.file.attribute.FileTime;
import java.text.SimpleDateFormat;
import java.io.Writer;

public class TestFileTime2 {
    public static void main(String[] args) {
        SimpleDateFormat ymd = new SimpleDateFormat("yyyyMMdd");
        String today = ymd.format(new Date());
        Path path = Paths.get(String.format("%s.txt", today));
        try (Writer w = Files.newBufferedWriter(path)) {
            w.write(today);
            w.write("\n");
        } catch (Exception e) {
            e.printStackTrace();
            throw new RuntimeException(e);
        }
        try {
            FileTime fileTime = FileTime.fromMillis(ymd.parse(today).getTime());
            Files.setLastModifiedTime(path, fileTime);
        } catch (Exception e) {
            e.printStackTrace();
            throw new RuntimeException(e);
        }
    }
}

まとめ

ここまで作ったものの、javaバッチはshellで起動しているので、
shellでtouchすればよかった。

1
2
3
FILENAME=`date '+%Y%m%d.txt'`
TODAY=`date '+%m%d0000'`
touch -t $TODAY $FILENAME
同じタグの記事
同じカテゴリの記事

pyenvでpython環境をインストール

pyenvでpython環境をインストール

python3.7.0がリリースされた。
Windows環境へのインストールは、公式サイトよりembeddable zipをダウンロードし、
PYTHONHOMEとPATH環境変数を設定して更新した。
環境変数で実行バージョンが簡単に切り替えられるので、便利。

macへのインストールは公式サイトよりinstallerをダウンロードし、
インストールして更新した。
インストールの前に旧バージョンの削除も忘れずに。
しかし、この作業が結構面倒。
インストラーはインストールはしてくれるが、削除は手作業でファイルを削除しなくてはならない。

macではpyenvを使ってバージョン管理することにする。

pyenvのインストール

githubよりスクリプトをダウンロード。

1
git clone https://github.com/pyenv/pyenv.git ~/.pyenv

.bash_profileを編集

1
2
3
4
vim ~/.bash_profile
export PYENV_ROOT=$HOME/.pyenv
export PATH_$PYENV_ROOT/bin:$PATH
eval "$(pyenv init -)"

編集した.bash_profileを読み込む。

1
. ~/.bash_profile

特定のバージョンのpythonをインストール。

ソースをビルドするので、結構時間がかかる。

1
pyenv install 3.7.0

新しいバージョンのpythonをインストールしたときは、下記のコマンドを実行する。

1
pyenv rehash

インストールしたpythonを利用する。

1
pyenv global 3.7.0

バージョン確認

1
python --version

インストールしたpythonのアンインストール



1
pyenv uninstall 3.7.0

まとめ

次回から、最新版の取り込みが簡単になりそうだ。

同じタグの記事
同じカテゴリの記事