LoginSignup
2
1

More than 5 years have passed since last update.

GooglePlayMusicでの目覚まし with Selenium on Mac

Last updated at Posted at 2019-02-05

動機

・スマホの目覚ましや目覚まし時計は毎朝同じ音で飽きる
・音楽サービスはSpotifyやら色々あるけれど、自分はGooglePlayMusic(以下GPMに略)が気に入っている。

→GPMのプレイリストのランダム再生を目覚ましに設定したい!でもWeb版もスマホアプリ版にもそういった機能はない。。。

Webサービスなんだし、Seleniumとかでなんとかなるんじゃない?

2019年4月2日変更

  • sideファイルの必要バージョンが上がったので1.1→2.0に変更
  • chromedriverのインストール手順追加

環境

PC: Mac (Windowsでも可能ですが、若干やり方が異なります)
ブラウザ: Chrome (Firefoxでもできそう)

準備

1.chrome拡張でSelenium IDEをインストールする
2.macにnpmが入っていなかったらインストールしておく

nodeのインストール(nodeをインストールするとnpmもついてきます。)
https://nodejs.org/en/download/
からダウンロードしてインストール

macの場合はhomebrewを使って以下のコマンドでも可。
$brew install node

3.chromedriverをインストールする

$brew tap homebrew/cask
$brew cask install chromedriver

4.npmでselenium-side-runnerをインストールする

$npm install -g selenium-side-runner

やり方

※前提:ここではファイル置き場のディレクトリを

/Users/[ユーザ名]/AlarmMusic

としていますが、適当な場所で構いません。

Selenium IDEでGPMの操作手順を記録し、sideファイルを保存する

・完全にログアウトした状態からGoogleにログインし、希望のプレイリスト等を動かすところまでを操作して記録してください。(※私のサンプルを下に載せます。)

置き場所
/Users/[ユーザ名]/AlarmMusic/music.side

上記を起動するスクリプトを用意する

start.sh
#!/bin/sh
osascript -e "set volume 70/100*7"
/usr/local/bin/selenium-side-runner --timeout 7200000 /Users/[ユーザ名]/AlarmMusic/music.side

・ここで、osascriptの行は、音量調整です。
70/100というのが音量の%になるので、各自好みの音量に設定してください。
・timeoutはミリ秒です(7200000で二時間)。ここでの値は長めに設定しておくと良いかと思います。

cronを設定する

$crontab -e
0,40 6 * * * bash -l -c 'sh /Users/[ユーザ名]/AlarmMusic/start.sh'

・上で用意したスクリプトを指定します。
・cronの設定は各々好きなようにしてください。↑の例だと毎日6:00と6:40にアラーム起動します。

操作としては以上です。

補足:私のmusic.side

・ID/PWは各々のものを指定してください。
・「高く評価」した曲をシャッフル再生する様になっています
・あくまで私の環境で動作しているものであり、これをこのまま適用して動作することを補償するものではありません。

music.side
{
  "id": "7ebfd287-a042-4e94-aa24-dfc42721707c",
  "version": "2.0",
  "name": "music",
  "url": "https://play.google.com/music",
  "tests": [{
    "id": "163cb9c0-6610-4e34-aab6-2844cc7f15ed",
    "name": "play",
    "commands": [{
      "id": "de15c437-d1f2-4fd5-9a20-a297be382f94",
      "comment": "",
      "command": "open",
      "target": "https://play.google.com/music/listen",
      "targets": [],
      "value": ""
    }, {
      "id": "da73f4ba-0d15-4942-bd34-6342686dd733",
      "comment": "",
      "command": "setWindowSize",
      "target": "1420x857",
      "targets": [],
      "value": ""
    }, {
      "id": "211c24b3-24b2-4027-8026-845966525a07",
      "comment": "",
      "command": "click",
      "target": "id=gb_70",
      "targets": [
        ["id=gb_70", "id"],
        ["linkText=ログイン", "linkText"],
        ["css=#gb_70", "css"],
        ["css=#gb_70", "css:finder"],
        ["xpath=//a[contains(text(),'ログイン')]", "xpath:link"],
        ["xpath=//a[@id='gb_70']", "xpath:attributes"],
        ["xpath=//div[@id='gb']/div/div/div[3]/div/a", "xpath:idRelative"],
        ["xpath=//a[contains(@href, 'https://accounts.google.com/ServiceLogin?service=sj&passive=1209600&continue=https%3A%2F%2Faccounts.google.com%2FServiceLogin%3Fservice%3Dsj%26continue%3Dhttps%253A%252F%252Fplay.google.com%252Fmusic%252Flisten%26utm_medium%3Dsigned_out_warm_welcome%26welcome%3D0&followup=https://play.google.com/music/listen')]", "xpath:href"],
        ["xpath=//div[3]/div/a", "xpath:position"]
      ],
      "value": ""
    }, {
      "id": "86468053-e46e-4ec0-8406-87f13c07711e",
      "comment": "",
      "command": "pause",
      "target": "2000",
      "targets": [],
      "value": "2000"
    }, {
      "id": "dbab7d6a-6c2d-49ef-a57c-0d7ea7dca504",
      "comment": "",
      "command": "type",
      "target": "id=identifierId",
      "targets": [
        ["id=identifierId", "id"],
        ["name=identifier", "name"],
        ["css=#identifierId", "css"],
        ["css=#identifierId", "css:finder"],
        ["xpath=//input[@id='identifierId']", "xpath:attributes"],
        ["xpath=//div[@id='view_container']/div/div/div[2]/div/div/div/form/content/section/div/content/div/div/div/div/div/input", "xpath:idRelative"],
        ["xpath=//input", "xpath:position"]
      ],
      "value": "あなたのGoole ID"
    }, {
      "id": "b7df84fd-a2fc-4c9f-8640-8ec9cdbdfe64",
      "comment": "",
      "command": "click",
      "target": "id=identifierNext",
      "targets": [
        ["css=span.RveJvd.snByac", "css"],
        ["css=#identifierNext .RveJvd", "css:finder"],
        ["xpath=//div[@id='identifierNext']/content/span", "xpath:idRelative"],
        ["xpath=//content/span", "xpath:position"]
      ],
      "value": ""
    }, {
      "id": "ef431222-4431-4bff-b807-4ceea21a40dc",
      "comment": "",
      "command": "pause",
      "target": "3000",
      "targets": [],
      "value": "3000"
    }, {
      "id": "e8acfe44-3f16-4cfd-a44e-4c6d3b949e16",
      "comment": "",
      "command": "click",
      "target": "name=password",
      "targets": [],
      "value": ""
    }, {
      "id": "d717d5e2-9df9-4e56-8248-a1365fca6bce",
      "comment": "",
      "command": "type",
      "target": "name=password",
      "targets": [
        ["name=password", "name"],
        ["css=input[name=\"password\"]", "css"],
        ["css=.I0VJ4d .zHQkBf", "css:finder"],
        ["xpath=//input[@name='password']", "xpath:attributes"],
        ["xpath=//div[@id='password']/div/div/div/input", "xpath:idRelative"],
        ["xpath=//div/input", "xpath:position"]
      ],
      "value": "あなたのGoogleパスワード"
    }, {
      "id": "a3d989f1-3090-444c-a550-ae06f050fcb9",
      "comment": "",
      "command": "click",
      "target": "id=passwordNext",
      "targets": [
        ["css=content.CwaK9", "css"],
        ["css=#passwordNext > .CwaK9", "css:finder"],
        ["xpath=//div[@id='passwordNext']/content", "xpath:idRelative"],
        ["xpath=//div[2]/div/div/div/content", "xpath:position"]
      ],
      "value": ""
    }, {
      "id": "53ac7cc4-fa44-4e42-aa2e-fd80944bb37f",
      "comment": "",
      "command": "pause",
      "target": "15000",
      "targets": [],
      "value": "15000"
    }, {
      "id": "e74c958d-8082-4e84-adce-13bc4a2f6960",
      "comment": "",
      "command": "click",
      "target": "css=#playlist-drawer-button > #icon",
      "targets": [
        ["css=#playlist-drawer-button > #icon", "css"],
        ["css=#playlist-drawer-button > #icon", "css:finder"],
        ["xpath=(//iron-icon[@id='icon'])[3]", "xpath:attributes"],
        ["xpath=//paper-icon-button[@id='playlist-drawer-button']/iron-icon", "xpath:idRelative"],
        ["xpath=//div[4]/paper-icon-button/iron-icon", "xpath:position"]
      ],
      "value": ""
    }, {
      "id": "77cc1dca-9da8-448c-8c77-dea2e2198591",
      "comment": "",
      "command": "pause",
      "target": "5000",
      "targets": [],
      "value": "5000"
    }, {
      "id": "65bdcc17-704b-41e8-ad24-c9c04d6573b7",
      "comment": "",
      "command": "click",
      "target": "css=div.playlist-title",
      "targets": [
        ["css=div.playlist-title", "css"],
        ["css=.autoplaylist-section > .playlist-drawer-item:nth-child(1) .playlist-title", "css:finder"],
        ["xpath=//div[@id='mainContainer']/div/div/a/div", "xpath:idRelative"],
        ["xpath=//paper-header-panel/div/div/div/div/a/div", "xpath:position"]
      ],
      "value": ""
    }, {
      "id": "584d6ee6-19f8-4348-94ff-fc04b3972df1",
      "comment": "",
      "command": "pause",
      "target": "3000",
      "targets": [],
      "value": "3000"
    }, {
      "id": "15a491cb-a4d8-4306-9b67-0d8bfd126909",
      "comment": "",
      "command": "click",
      "target": "css=.button-wrapper > .paper-button-1",
      "targets": [
        ["css=.button-wrapper > .paper-button-1", "css:finder"],
        ["xpath=//div[@id='music-content']/div[3]/div/div/gpm-detail-page-header/div[2]/div[5]/paper-button", "xpath:idRelative"],
        ["xpath=//div[2]/div[5]/paper-button", "xpath:position"]
      ],
      "value": ""
    }, {
      "id": "7eca9718-1058-42b6-a9cc-5fb71d9b0d2d",
      "comment": "",
      "command": "pause",
      "target": "1440000",
      "targets": [],
      "value": "1440000"
    }]
  }],
  "suites": [{
    "id": "01ed6946-5b84-4ed1-b16d-cf0c8a1ab099",
    "name": "Default Suite",
    "persistSession": false,
    "parallel": false,
    "timeout": 144000,
    "tests": ["163cb9c0-6610-4e34-aab6-2844cc7f15ed"]
  }],
  "urls": ["https://play.google.com/", "https://play.google.com/music"],
  "plugins": []
}

注意事項1: selenium-side-runnerとブラウザログイン状態

selenium-side-runnerで開かれるブラウザは通常ブラウザを開いた時と異なり、Googleへのログイン状態などは引き継がれません。シークレットモードのような感じです。
なので、Seleniumの操作もログインする所から記録する必要があります。

注意事項2: timeoutについて

ちゃんと調査していないのですが、selenium ideで作られるsideファイルそのままだと数分ででタイムアウトして目覚まし(立ち上がったブラウザ)が止まってしまいます。
sideファイル内のtimeout設定を適宜調整してください。
私のmusic.sideだと
"timeout": 144000
という部分の指定により20分になっています。

2
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
1