質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

ただいまの
回答率

90.03%

【ブザウザ操作の自動化】chromeのブックマーク登録を自動化したい

解決済

回答 1

投稿 編集

  • 評価
  • クリップ 3
  • VIEW 1,505
退会済みユーザー

退会済みユーザー

●実現したいこと
ツールやアプリ等は使わずに、chromeのブックマークマーク登録を自動で行えるようにしたいです。
※batファイルとjavascript を使用して作成してみました。
javascript 初心者です。

●自動化したい操作
①chromeの起動
②Googleへログイン(URL表示)
③ブックマークに登録するタイトルを入力
④ ③の名前でブックマーク登録(登録フォルダの振り分けを行う)
⑤完了メッセージ出力

●試した事
batファイルとjavascriptはブックマークレットを使用して、部分的に実装しました。

①chromeの起動は、batファイルを作成しました。

@echo off
start chrome.exe

②googleへログイン

//ログイン
javascript:location.href="https://〜ログイン画面URL〜";
//ID入力
javascript:(function(){n=document.getElementsByName("identifier"); n.item(0).value="Googleアカウント";})();document.getElementById("identifierNext").click();
//PW入力
javascript:(function(){n=document.getElementsByName("password"); n.item(0).value="Googleパスワード";})();document.getElementById("passwordNext").click();

③ブックマークに登録する名前を入力

javascript:window.prompt("番号を入力");
javascript:window.prompt("名前を入力");

⑤完了メッセージ

javascript:alert("登録完了");

●困っていること
部分的に再現する事は出来ましたが、これらをどのように繋げて一つの動作にしたらいいか分かりません。
Googleログイン時の、アカウント入力とPW入力をひとつのブックマークレットに登録してみましたが、アカウント入力で止まってしまい、PW入力までいきませんでした。

また、ブックマークにどのように登録したらいいのか分かりません。

イメージは、ブックマークフォルダの階層
その他のブックマーク
階層①     I—モバイルのブックマーク
階層 ②          lー 登録フォルダ
階層③                 lー1番目・・ここに登録
階層③                 lー2番目・・ここに登録

→入力した番号の頭文字と同じ番号フォルダにブックマーク登録する

番号入力に 143  と入力
名前入力に  テスト と入力
→1番目のフォルダに、『 143 テスト』という名前でブックマークします。

chrome起動から自動化出来るのが理想ですが、chromeのブックマークレットを一つ起動すると、登録が行える仕組みでも構いません。

この方法で実装するにはどのようにしたらいいのかご存知でしたら、教えて頂けますでしょうか。
また他に良い方法があるようでしたら教えてください。

  • 気になる質問をクリップする

    クリップした質問は、後からいつでもマイページで確認できます。

    またクリップした質問に回答があった際、通知やメールを受け取ることができます。

    クリップを取り消します

  • 良い質問の評価を上げる

    以下のような質問は評価を上げましょう

    • 質問内容が明確
    • 自分も答えを知りたい
    • 質問者以外のユーザにも役立つ

    評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

    質問の評価を上げたことを取り消します

  • 評価を下げられる数の上限に達しました

    評価を下げることができません

    • 1日5回まで評価を下げられます
    • 1日に1ユーザに対して2回まで評価を下げられます

    質問の評価を下げる

    teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

    • プログラミングに関係のない質問
    • やってほしいことだけを記載した丸投げの質問
    • 問題・課題が含まれていない質問
    • 意図的に内容が抹消された質問
    • 広告と受け取られるような投稿

    評価が下がると、TOPページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

    質問の評価を下げたことを取り消します

    この機能は開放されていません

    評価を下げる条件を満たしてません

    評価を下げる理由を選択してください

    詳細な説明はこちら

    上記に当てはまらず、質問内容が明確になっていない質問には「情報の追加・修正依頼」機能からコメントをしてください。

    質問の評価を下げる機能の利用条件

    この機能を利用するためには、以下の事項を行う必要があります。

質問への追記・修正、ベストアンサー選択の依頼

  • kou0179

    2019/04/11 20:31

    実現したい事のイメージがあまり見えないのですが、ブックマークをワンクリックでGoogleへログインできるものを作りたい という認識でよろしいでしょうか。

    キャンセル

  • 退会済みユーザー

    退会済みユーザー

    2019/04/12 14:26

    説明不足で申し訳ございません。
    一番実現したいことは、ブックマークの登録を自動で行いたいです。
    その前の作業として、chromeの起動からブックマークを登録するアカウントへログイン出来たらと思い記載させていただきました。

    キャンセル

  • 退会済みユーザー

    退会済みユーザー

    2019/04/12 14:29

    登録内容をどのように指定するかは検討中ですが、そもそもブックマークを自動で登録する事ができるかという所も良く分からずで困っておりました。

    キャンセル

回答 1

checkベストアンサー

0

まず初めに

ChromeではJSによるブックマーク登録はサポートしていません。

また、ページ遷移先で、遷移元やブックマークレットによるJSを実行するのは難しいと思います。
(あくまでもGoogleのログインページについてからブックマークレットを実行しなければらなない)

よって本回答では、以下想定の元コードを記載いたしますので、使えそうな部分があれば参考にしてください。
  • Googleログインページについてからブックマークレットを実行
  • 自動でログインするだけ

パスワードが入力されない理由

GoogleのログインページはIDとパスワードでページが分かれているようです。
非同期等が原因になり、ページ更新される前にパスワードが入力されてしまっています。
但し、ID入力画面からパスワード入力画面のページ遷移は、あくまでもDOM操作とURL操作が伴うだけで、実際にはページが遷移した訳ではなくそう見えるだけなので、JavaScriptを2ページまたいで使えます

ID入力ページ→パスワード入力ぺージ間の画面更新を待つ

const inputPassword = function() {
    const n = document.getElementsByName("password");
    n.item(0).value = password;
    document.getElementById("passwordNext").click();
}

const secondWait = function(){
    const secondWaitInterval = setInterval(function() {
        if (location.href.indexOf("https://accounts.google.com/signin/v2/sl") === 0) {
            inputPassword();
            clearInterval(secondWaitInterval);
        }
    }, 300)
}

const inputAccount = function() {
    const n = document.getElementsByName("identifier");
    n.item(0).value = account;
    document.getElementById("identifierNext").click();
    secondWait();
}

const firstWait = function(){
    const firstWaitInterval = setInterval(function() {
        if (location.href.indexOf("https://accounts.google.com/signin/v2/identifier") === 0) {
            inputAccount();
            clearInterval(firstWaitInterval);
        }
    }, 300)
}

const account = "Googleアカウント";
const password = "Googleパスワード";
//ダメだった location.href = "https://www.google.com/accounts?hl=ja-JP";
firstWait();

コールバック地獄バージョン

const account = "Googleアカウント";
const password = "Googleパスワード";

const firstWaitInterval = setInterval(function() {
    if (location.href.indexOf("https://accounts.google.com/signin/v2/identifier") === 0) {
        clearInterval(firstWaitInterval);
        const id = document.getElementsByName("identifier");
        id.item(0).value = account;
        document.getElementById("identifierNext").click();
        const secondWaitInterval = setInterval(function() {
            if (location.href.indexOf("https://accounts.google.com/signin/v2/sl") === 0) {
                clearInterval(secondWaitInterval);
                const pw = document.getElementsByName("password");
                pw.item(0).value = password;
                document.getElementById("passwordNext").click();
            }
        }, 300)
    }
}, 300)

ブックマークレット変換サイト

※IDとパスワードのURIエスケープが必要だと思うのでご自身で変換をお願いします。

https://ytyng.github.io/bookmarklet-script-compress/
https://mrcoles.com/bookmarklet/
http://bookmarklets.org/maker/

追記

postMessageやWeb Messaging API等を使い、iframeや子Windowsを使いクロスドメインをまたいだJSの実行を行えば、Googleにログインする事はできなくないかもしれませんが、不正アクセスみたいで少しナンセンスと思い記載しておりません。

投稿

編集

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2019/04/12 14:37

    ご回答ありがとうございます。
    JSでchromeのブックマーク登録のサポートはしていないのですね。。
    ほかの言語やツールでは、行う事が出来るのでしょうか。


    パスワードが入力されない理由もありがとうございます。
    ログイン部分を試してみます。
    ありがとうございます!

    キャンセル

15分調べてもわからないことは、teratailで質問しよう!

  • ただいまの回答率 90.03%
  • 質問をまとめることで、思考を整理して素早く解決
  • テンプレート機能で、簡単に質問をまとめられる