<Python, selenium> マウスホバーのやり方

レニウムseleniumでマウスホバーmouse hoverする方法。

まずは、selenium起動して、東京アメッシュに行ってみる。

In [1]: from selenium import webdriver

In [2]: from selenium.webdriver.chrome.options import Options

In [3]: options = Options()

In [4]: options.add_argument('--wndow-size=800,600')

In [6]: d = webdriver.Chrome(chrome_options=options)

In [7]: url = 'http://tokyo-ame.jwa.or.jp/'

In [8]: d.get(url)

f:id:nekoyukimmm:20180224192111p:plain

で、マウスホバーしたところのxpathを探す。

f:id:nekoyukimmm:20180224192318p:plain

1... F12に押す。
2... 1の部分を押す。
3... ターゲットの2を押す。
4... 3に行く。
5... マウス右クリックでメニューを出して、4Copy Xpathをゲット。

で、ゲットしたxpath

In [9]: xpath= '//*[@id="area_button"]/ul/li[8]/a/img'

で、マウスホバーするためのオブジェクト読み込み。

In [10]: from selenium.webdriver.common.action_chains import ActionChains

In [11]: actions = ActionChains(d)

で、ホバー。

In [12]: actions.move_to_element(d.find_element_by_xpath(xpath)).perform()

f:id:nekoyukimmm:20180224192732p:plain

ちなみに、xpathで指定するのは、タグtag内のアトリビュートattribute
いろいろ選べる。

f:id:nekoyukimmm:20180224192843p:plain

In [14]: xpath = '//*[@id="moviePlay"]'

In [15]: xpath = '//*[@name="play"]'

In [16]: d.find_element_by_xpath(xpath).click()

In [21]: xpath = '//*[text()="TEAM BEYOND"]'

In [22]: actions.move_to_element(d.find_element_by_xpath(xpath)).perform()

In [23]: d.quit()

<Python> ファイル名のリスト + 時刻でソート(その2)

検索したら過去に同じことをやってたが、せっかくなので、メモっておく。 ファイル名のリストlistを時刻timeでソートsortする。

In [4]: ls
 ドライブ C のボリューム ラベルは Windows8_OS です
 ボリューム シリアル番号は 1679-D852 です

 C:\msys64\home\Nekoyuki\tmp\tmp のディレクトリ

2018/02/24  11:16    <DIR>          .
2018/02/24  11:16    <DIR>          ..
2018/02/24  11:15                 1 aaa.txt
2018/02/24  11:15                 1 bbb.txt
2018/02/24  11:15                 1 ccc.txt
2018/02/24  11:16                 1 ddd.txt
2018/02/24  11:15                 1 fff.txt
               5 個のファイル                   5 バイト
               2 個のディレクトリ  67,190,915,072 バイトの空き領域

In [5]: import glob

In [6]: import os

In [7]: glob.glob('{}/*'.format(os.getcwd()))
Out[7]: 
['C:\\msys64\\home\\Nekoyuki\\tmp\\tmp\\aaa.txt',
 'C:\\msys64\\home\\Nekoyuki\\tmp\\tmp\\bbb.txt',
 'C:\\msys64\\home\\Nekoyuki\\tmp\\tmp\\ccc.txt',
 'C:\\msys64\\home\\Nekoyuki\\tmp\\tmp\\ddd.txt',
 'C:\\msys64\\home\\Nekoyuki\\tmp\\tmp\\fff.txt']

In [8]: lst = glob.glob('{}/*'.format(os.getcwd()))

In [9]: [i for i in lst if 'ddd' in i]
Out[9]: ['C:\\msys64\\home\\Nekoyuki\\tmp\\tmp\\ddd.txt']

In [10]: [i for i in lst if 'ddd' in i][0]
Out[10]: 'C:\\msys64\\home\\Nekoyuki\\tmp\\tmp\\ddd.txt'

In [11]: os.path.getctime([i for i in lst if 'ddd' in i][0])
Out[11]: 1519438562.2302387

In [12]: lst.sort(key=lambda x: os.path.getctime(x))

In [13]: lst
Out[13]: 
['C:\\msys64\\home\\Nekoyuki\\tmp\\tmp\\aaa.txt',
 'C:\\msys64\\home\\Nekoyuki\\tmp\\tmp\\bbb.txt',
 'C:\\msys64\\home\\Nekoyuki\\tmp\\tmp\\ccc.txt',
 'C:\\msys64\\home\\Nekoyuki\\tmp\\tmp\\fff.txt',
 'C:\\msys64\\home\\Nekoyuki\\tmp\\tmp\\ddd.txt']

In [14]: [ os.path.getctime(i) for i in lst]
Out[14]: 
[1519438541.031442,
 1519438544.5682108,
 1519438548.668558,
 1519438556.8538623,
 1519438562.2302387]

In [15]: [os.path.basename(i) for i in lst]
Out[15]: ['aaa.txt', 'bbb.txt', 'ccc.txt', 'fff.txt', 'ddd.txt']

過去記事。
nekoyukimmm.hatenablog.com

<Python> 相対パス + ipythonでエラー

下記のようなファイル構成をとっていて、、

 % tree hage
hage
├── __init__.py
└── main.py
├── hige
│   ├── __init__.py
│   └── core.py

1 directory, 4 files

で、main.pyで、

from hige.core import *

として、インポートする。
この場合は、ipythonで、run main.pyは問題なく動く。
が、pipでインストールする場合、こける。

が、相対パスでインポートする記述の場合、 つまり、

from .hige.core import *

とすると、 ipythonでのrun main.pyはこけるが、
pipインストールは成功する。

どっちもうまくならんもんか?、、 と思っていたら、
いつものスタックさんに回答があった。

下記でうまくいった。

try:
    from .hige.core import *
except Exception:
    from hige.core import *

いつも助かるスタックオーバーフローさん。
stackoverflow.com

<Python> listから空のものを除く

listから、空つまり、"のものを除く。
リスト内包表記を使えば一発。

リスト作成。

In [1]: aaa = '''
   ...: aaa
   ...: bbb
   ...: ccc
   ...: '''

In [2]: aaa.split('\n')
Out[2]: ['', 'aaa', 'bbb', 'ccc', '']

In [3]: lst = aaa.split('\n')

In [4]: lst
Out[4]: ['', 'aaa', 'bbb', 'ccc', '']

で、リスト内包表記

In [5]: [x for x in lst if x is not '']
Out[5]: ['aaa', 'bbb', 'ccc']

<Google Cloud Platform> Google Cloud SDKを入れなおす。

前にWindows版 --> Linux版 on msys2 と入れて、ぐちゃぐちゃ?っぽくなってしまったので、入れなおした。
両方削除して、Linux版だけ入れた。

下記から、zipをダウンロードして展開。

Linux 用のクイックスタート  |  Cloud SDK のドキュメント  |  Google Cloud Platform

 % gunzip google-cloud-sdk-180.0.0-linux-x86_64.tar.gz

 % tar xvf google-cloud-sdk-180.0.0-linux-x86_64.tar

 % cd google-cloud-sdk

 % ./install.sh
Welcome to the Google Cloud SDK!

To help improve the quality of this product, we collect anonymized usage data
and anonymized stacktraces when crashes are encountered; additional information
is available at <https://cloud.google.com/sdk/usage-statistics>. You may choose
to opt out of this collection now (by choosing 'N' at the below prompt), or at
any time in the future by running the following command:

    gcloud config set disable_usage_reporting true

Do you want to help improve the Google Cloud SDK (Y/n)?  n


Your current Cloud SDK version is: 180.0.0
The latest available version is: 185.0.0

┌──────────────────────────────────────────────────────────────────────────────────────────────────────────┐
│                                                Components                                                │
├──────────────────┬────────────────────────────────────────────────┬──────────────────────────┬───────────┤
│      Status      │                      Name                      │            ID            │    Size   │
├──────────────────┼────────────────────────────────────────────────┼──────────────────────────┼───────────┤
│ Update Available │ BigQuery Command Line Tool                     │ bq                       │   < 1 MiB │
│ Update Available │ Cloud SDK Core Libraries                       │ core                     │   7.0 MiB │
│ Not Installed    │ Cloud Datalab Command Line Tool                │ datalab                  │   < 1 MiB │
│ Not Installed    │ Cloud Datastore Emulator                       │ cloud-datastore-emulator │  17.7 MiB │
│ Not Installed    │ Cloud Datastore Emulator (Legacy)              │ gcd-emulator             │  38.1 MiB │
│ Not Installed    │ Cloud Pub/Sub Emulator                         │ pubsub-emulator          │  33.2 MiB │
│ Not Installed    │ gcloud Alpha Commands                          │ alpha                    │   < 1 MiB │
│ Not Installed    │ gcloud Beta Commands                           │ beta                     │   < 1 MiB │
│ Not Installed    │ gcloud app Java Extensions                     │ app-engine-java          │ 118.7 MiB │
│ Not Installed    │ gcloud app PHP Extensions                      │ app-engine-php           │           │
│ Not Installed    │ gcloud app Python Extensions                   │ app-engine-python        │   6.1 MiB │
│ Not Installed    │ gcloud app Python Extensions (Extra Libraries) │ app-engine-python-extras │  27.8 MiB │
│ Installed        │ Cloud Storage Command Line Tool                │ gsutil                   │   3.3 MiB │
└──────────────────┴────────────────────────────────────────────────┴──────────────────────────┴───────────┘
To install or remove components at your current SDK version [180.0.0], run:
  $ gcloud components install COMPONENT_ID
  $ gcloud components remove COMPONENT_ID

To update your SDK installation to the latest version [185.0.0], run:
  $ gcloud components update

==> Source [/home/Nekoyuki/google-cloud-sdk/completion.zsh.inc] in your profile to enable shell command completion for gcloud.
==> Source [/home/Nekoyuki/google-cloud-sdk/path.zsh.inc] in your profile to add the Google Cloud SDK command line tools to your $PATH.

For more information on how to get started, please visit:
  https://cloud.google.com/sdk/docs/quickstarts

で、つづきはこちら。
Cloud SDK ツールの承認  |  Cloud SDK のドキュメント  |  Google Cloud Platform

こちらも参考になる。

qiita.com

<Github> pushでユーザ、パスワード省略

pushするときに、ユーザuser、パスワードpasswordを省略する方法。

.netrcに書き込めばいいらしい。

 % more ~/.netrc
machine github.com
login username
password xxxxxxx

この記事がよくまとまってました。
qiita.com