開いているChromeタブのリストをエクスポートするにはどうすればよいですか?


44

Chromeの同期機能では、Android搭載端末で開いているすべてのタブが選択されません。

タブはアクセス可能なファイルに保存されていますか?

デバイスのファクトリリセットを実行できるように、タブのリストをエクスポートするつもりです。

Android 4.3を実行する


そのためのアドオンがあればいいのに。
neverMind9

これを行うには、スタンドアロンのルートレス方法が必要です。ブートローダーがワイプするため。ブートローダーワイプの頭痛を起こした人はすぐに解雇されるべきです。ブートローダーはトラップです。ロックを解除すると、データ全体が強制的に消去され、一部のデータは最初にロックを解除しないとバックアップできません。悪循環。そして、暗号化とARM TrustZoneの頭痛の種もあります。
neverMind9

回答:


35

Chromeデバッガーのリモートデバイス機能を使用して、デバイス上のChromeに接続し、タブにアクセスできます。表示されているタブのリストを展開して完全なリストを取得し、表示されているすべて(URLを含む)をハイライトしてクリップボードにコピーします:https : //developers.google.com/web/tools/chrome-devtools/remote-debugging/

この方法で400個のタブをエクスポートできました。


3
彼らはあまりにも長い場合クロームデバッガリストはとても代わりにコピー&ペーストでは、URLの直接にメソッドを使用して取得することができ、URLを短縮することを言及したかったルイ・マドックスの答え
woojoo666

@ woojoo666:Chromeの状況が変わったように見えますが、今ではLouisの回答も多くのURLの終わりを切り捨てています。100文字を超えるURLのように見えます-私の場合、開いているすべてのタブの約50%で、末尾が欠落しています。
ペテルフレン

@peterflynnはまだ私のために働いています。432文字のURLをエクスポートしただけです。念のため、開発者ツールをポップアップウィンドウで開き、「リモートデバイス」ペインに移動し、ctrl-shift-Jを使用して2番目の開発者ツールウィンドウを開き、提供されたスクリプトを使用します。ここで、正しいですか?
woojoo666

これを行うために最低限必要なAndroidバージョンは何ですか?
neverMind9

スタンドアロンの方法があればいいのにと思います。外部メソッドに依存しない。ルートタブリストはありますが、誤動作のリスクがあると言われているため、私の携帯電話はルート化されていません。
neverMind9

25

このStackExchangeに参加して、上記のJeremyの回答に感謝し、タブリストのエクスポートに使用したJSの数行を追加しました(カーソルでコピーするのは理想的ではないからです!)

Jeremyが言ったように、Chrome開発ツールアイコン(パネルの右上)でRemote devices以下More toolsを選択します

  • 電話機でUSBデバッグを設定します(Settings⇒の下でDeveloper options、ルートは不要です)
    • Developer optionsメニューを有効にする必要があり、ユーザーを保護するためにデフォルトで非表示になっていることに注意してください
    • 私の携帯電話では、Settings⇒の下のビルド番号を複数回タップする必要がありましたAbout Device
  • これが完了したら、USBを接続し、MTP接続を許可します
  • Chrome devtoolsリモートデバイスパネルが開いている場合、電話機はUSBデバッグを許可するように要求します
    • あなたは常にコンピュータを信頼することを選ぶことができます

これでデバイスが接続され、

  • Remote devicesJavaScriptを使用してタブのリストを取得できるように選択したdevtoolsビューで2番目のdevtoolsビューを開きます
    • これを取得するには、devtoolsをポップアウトモード(パネルの右上にある垂直の省略記号を使用)にしておく必要があります。そうしないと、Command + Option + J(MAC)Ctrl+ Shift+ J(WINDOWS)が閉じます最初のdevtoolsパネル。
  • [もっと見る]をクリックして、リストを最初のいくつかの項目からすべてのタブに展開します
  • リストに対してスクリプトを作成するには、次の数行のコードを使用します[2番目のdevtoolsウィンドウのコンソールに入力]
    • NB /deep/#shadow-rootDOM要素を入力するCSSセレクターです

Chrome for Androidで開いているすべてのURLのリストをエクスポートするには、リストをマークダウン形式のテキスト文字列にして、クリップボードにコピーすることを選択しました

tabs = Array.from(document.querySelectorAll('div /deep/ div /deep/ div /deep/ div /deep/ div /deep/ .device-page-list .vbox'), s => ({name: s.querySelector('.device-page-title').textContent, url: s.querySelector('.device-page-url .devtools-link').href}))
str = '';
for (i=0;i<tabs.length;i++){
  str += '['+tabs[i]['name']+']('+tabs[i]['url']+')\n'
}
copy(str)

クリップボードには次のようなリストが表示されます。

[How can I export the list of open Chrome tabs? - Android Enthusiasts Stack Exchange](https://android.stackexchange.com/questions/56635/how-can-i-export-the-list-of-open-chrome-tabs)
[Get Started with Remote Debugging Android Devices  |  Tools for Web Developers  |  Google Developers](https://developers.google.com/web/tools/chrome-devtools/remote-debugging/)
[How To Enable USB Debugging On Your Android Phone](https://www.groovypost.com/howto/mobile/how-to-enable-usb-debugging-android-phone/)
[Configure On-Device Developer Options | Android Studio](https://developer.android.com/studio/debug/dev-options.html)
...

更新

何らかの理由で、アイテムの属性を取得できなかっというエラーが何度か表示されます(これを調べると、見えないノードであることがわかります)。これを回避するには、代わりにこのバージョンを使用してください。hrefnull

tabs = document.querySelectorAll('div /deep/ div /deep/ div /deep/ div /deep/ div /deep/ .device-page-list .vbox')
str = '';
for (i=0;i<tabs.length;i++){
  if (tabs[i].querySelector('.device-page-url .devtools-link') != null){
    str += '- ['+tabs[i].querySelector('.device-page-title').textContent + '](' + tabs[i].querySelector('.device-page-url .devtools-link').getAttribute('href') +')\n'
  } else {
    console.log(tabs[i])
  }
}
copy(str)

1
Chromeが変更され、動作tabs = Array.from(document.querySelectorAll('div /deep/ div /deep/ div /deep/ div /deep/ div /deep/ .device-page-list .vbox'), s => ({name: s.querySelector('.device-page-title').textContent, url: s.querySelector('.devtools-link')._href}))するようになりました
dlamotte

この手法を使用すると、100文字を超えるURLの末尾は切り捨てられることに注意してください。
peterflynn

@peterflynnはまだ私のために働いています。432文字のURLをエクスポートしました。ディアモットが提供したスクリプトを使用していることを確認してください
-woojoo666

1
また変わった。Chromeバージョン "73.0.3683.75(Official Build)(64-bit)"の場合:( tabs = Array.from(document.querySelector('div /deep/ div /deep/ div /deep/ div /deep/ div /deep/ div /deep/ div.vbox.flex-auto').shadowRoot.querySelectorAll('.devices-view .device-page-list .vbox'), s => ({name: s.querySelector('.device-page-title').textContent, url: s.querySelector('.device-page-url .devtools-link').getAttribute('href')}))セレクターを介して最終的なシャドウルートにアクセスできませんでしたが、.shadowRoot代わりにホスト要素のプロパティを使用する必要がありました。ちょっと、サポートされていない。
エイドリアン

1
他の誰かが問題を抱えている場合に備えて、これらのスクリプトの実行に問題がありました(停止する前に10分以上にわたってカーネルのUSBスタックを100%使用してハンマーで叩いていました)。私が見つけた最良の方法は、Chrome開発ツールインスペクタで親HTML要素を選択することでした(ネストされた開発ツールウィンドウの左上のカーソルボタンを使用してリスト内のランダムな項目を選択してから親要素を選択します)右クリック-> "HTMLとして編集"->別のテキストファイルにコピーします。その後、上記のスクリプトをそのローカルHTMLコピー(またはBASH)で動作するように適合させるのが簡単で、はるかに高速
でした

13

ある日ブラウザがクラッシュした後に完全に閉じられていたタブを回復しようとしていたときに、このソリューションに出会いました。必要な情報にアクセスするには、デバイスにインストールされているルートファイルにアクセスしてファイルエクスプローラーアプリを実行できるよう、デバイスをルート化する必要があります。ES File ExplorerまたはRoot Explorerが推奨です。

  1. デバイス(保護されたシステムパーティション)のルートフォルダーに移動し、DATA→を選択しますcom.android.chrome

  2. 現在のタブに関する情報を見つけることができる場所がいくつかあります。

    1. チェックする最初のフォルダはapp_tabs0です。このフォルダーにはtab_state、現在のすべてのタブのリストを含むファイルが必要です。
    2. このフォルダーにtab3tab4、などと呼ばれる、現在のタブに関する情報を含む他のファイルもあります。
    3. IMO、エンコードが異なるため、これらのファイルの一部のコンテンツを読み取るには、特別な「テキストエディター/ SQLエディター」が必要です。
  3. 次に見る場所は/data/com.android.chrome/app_chrome/Default/です。このフォルダには、というファイルがありますHistory。状況に応じて、ここで最近のサイトアクセスの良いリストを見つけることができます。

  4. 最後に、に移動しますSync Data folder。ここには、Googleに同期されている情報があります(これには、他のデバイスで現在同期しているすべてのタブが含まれている必要があります)。

    • ファイルにはSyncData.sqlite3、すべてのGoogle検索の履歴もあります(興味深い読み物であることが時々あります)。
    • このファイルを読み込むには、PCにSqlite3データブラウザープログラムが必要です。アプリは、MS Excelで開くことができる使いやすいファイル.CSVまたは.XLSファイルにエクスポートできる必要があります

これは、私が推測する誰かに役立つかもしれません。


5

あなたが持っている場合はAndroidのコマンドラインツールの開発マシンにインストールして、あなたのAndroidデバイス上でのデバッグUSBを有効にした場合、次の操作を実行できます。

  • adb forward tcp:9222 localabstract:chrome_devtools_remote開発マシンで実行します。

    Chromeインスタンスは、抽象アドレスchrome_devtools_remote」を持つUNIXドメインソケットを介してデバッグプロトコルへのアクセスを公開します。上記のadbコマンドは、要求をそのソケットのポート9222に転送します。(を入力すると、Androidデバイス上のすべてのUNIXドメインソケットのリストを取得できますadb shell cat /proc/net/unix。)

  • デバッグプロトコルは、HTTPを介してChromeインスタンスに関するJSONデータを公開します。を実行すると、開いているタブをリストしたJSONファイルを取得できますwget -O tabs.json http://localhost:9222/json/list

    (APIの他のエンドポイントはhttps://github.com/buggerjs/bugger-daemon/blob/master/README.md#apiで見つけることができます。)

参照してくださいここで USBデバッグを有効化、およびの詳細についてはこちらを、それがどのように動作するかの概要について。


2

この回避策により、Chrome for Androidで開いたすべてのタブの個別のURLを含むテキストファイルが提供されます。

  1. Michaelによるこの回答で述べたように、現在のタブを含むファイルを取得する必要があります。デバイスのルートエクスプローラーを使用して、このファイルを取得し、Windowsで選択したフォルダーに移動します。/data/data/com.android.chrome/app_tabs/0/tab_state

  2. Windows用GNUツールのインストール

  3. ファイルにスクリプトを台無しにする奇妙な矢印文字がある場合があります。スクリプトを実行し、ファイルの一部が切り捨てられた場合、最後の文字を見ると、おそらくその奇妙な矢印文字になります。元のファイルで検索/置換します。終了すると、スクリプトは正常に実行されます。次のようになります。-->

  4. コマンドラインプロンプトに移動し(「実行」またはWin+ Rcmd移動してを入力)、含まれるフォルダーsed.exe(手順2でインストールした場所)に移動します。

  5. おそらく、元のファイル(tab_state)をを含む同じフォルダに移動する必要がありますsed.exe。すべてが簡単になります。それが完了したら、次のスクリプトを実行します。

    sed -i "s/.\{6\}http/\r\n\r\nhttp/g" tab_state
    
  6. これにより、すべてのURLが正しくフォーマットされたファイルが変更されます。ファイルをテキストファイルとして開き、内容をコピーしてWord文書またはその他の場所に貼り付けます。何らかの理由で、データをコピーして貼り付けない場合、ファイルを保存するときにすべての改行/復帰が消去されます。うまくいかない場合は、最初からやり直してください。すべてが完了したら、前に開いていたすべてのタブへのリンクのリストを含むファイルが必要です。


2

Louis Maddoxのコンソールのコードをこのコードに置き換えることができますVersion 0.66.99 Chromium: 75.0.3770.100。これは今日現在機能しています。注:リモートデバイスウィンドウをアクティブにし、を押すと、リモートデバイスウィンドウの新しいコンソールウィンドウを開くことができます。Ctrl+Shift+J

tabs = Array.from(document.querySelector('div /deep/ div /deep/ div /deep/ div /deep/ div /deep/ div /deep/ div.vbox.flex-auto').shadowRoot.querySelectorAll('.devices-view .device-page-list .vbox'), s => ({name: s.querySelector('.device-page-title').textContent, url: s.querySelector('.device-page-url .devtools-link').getAttribute('href')}))

str = ' ';

tabs.forEach(e => {
    str += '- ['+ e.name + '](' + e.url +')\n';
})
copy(str)

その後、すべてのタブをテキストファイルに貼り付けることができます。

実際のデバイスですべてのタブを開きたい場合は、tabs.forEach-partを

tabs.forEach(e => {
    window.open(e.url, '_blank');
})

ただし、デバイスで開いているタブが多すぎる場合は、試してはいけません。

tabs開いたタブを手動で同期するために部品の後にこれを追加しました(この機能はまだありませんが、モバイルデバイスで650個のタブを開いていました)。

i=0;
j=0;
tabs.forEach(e => {
  if(i<50){
    i++;
    window.open(e.url, '_blank');
  }
  j++;
})
console.log("Tabs overall:"+j);

これにより、デバイスから50個のタブのバッチが開き、開いているブラウザーウィンドウに表示されます。また、全体のタブ数も表示されます。ただし、別のバッチを開く場合は、これらの開発者ツールとリモートデバイスの残りの「空」タブを閉じないでください。ではCtrl + TAB、あなたは、タブを切り替えてCtrl +D、それらをブックマークすると、Ctrl+Wアクティブなタブを閉じます。これは私が手動で行った方法です。誰でも簡単に作業できるように、このコードの変更を自由に提案してください。


1

Michaelはtab_stateファイルを識別しましたが、それをデコードするために残っています。次のスクリプトは私のために働いていました(kitkat KSH_VERSION = '@(#)MIRBSD KSH R43 2013/02/19'またはxenial BASH_VERSION = '4.3.46(1)-release'でChrome 49.0.2623.105のtab_stateファイルで)、最後のURLを最初に印刷し、印刷不可能なバイトと後続のすべてのバイトを削除し、必要に応じて少なくとも2バイトを削除します。各URLに続いてスペースを印刷し、削除された連続印刷可能バイト(ある場合)、カンマ、削除された他のバイト数(括弧内の&saidバイト)を印刷します。URLを印刷するには、代わりにコメント付きのechoコマンドのみを使用します。

tab_state=/data/data/com.android.chrome/app_tabs/0/tab_state
[[ $KSH_VERSION ]]||shopt -s extglob       #set if bash
(cat $tab_state;echo)|while read -r r;do b=
   while
      q=${r%http?(s)://*}          #chip off a URL
      [[ $q = *url= ]]&&{
         p=${r%http?(s)://*url=*}  #special case URL within URL
         [[ $p = "$r" ]]||q=$p;}
      h=${r:${#q}}                 #the chip
      h=${h%%[! -~]*}              #remove unprintable&following bytes
      u=$((${#r}-${#q}-${#h}))     #no of said bytes removed
      p=$((u<b?b-u:0))             #no of more bytes to remove
      [[ $h ]];do
         echo "${h::${#h}-p} ${h:${#h}-p},$u(${r:${#r}-u})"
      #  echo "${h::${#h}-p}"
         r=$q b=2
   done
done

1

読むにはrootまたはChromeである必要があります /data/data/com.android.chrome/app_tabs/0/tab_state0

脆弱なデバイスでこのdirtycowエクスプロイトを使用してChromeになりtab_state0、接続されたデバイスから取得できます。

make root
adb shell
run-as com.android.chrome
chmod 711 /data/data/com.android.chrome/app_tabs/0
chmod 644 /data/data/com.android.chrome/app_tabs/0/tab_state0
exit
cp /data/data/com.android.chrome/app_tabs/0/tab_state0 /sdcard/
exit
adb pull /sdcard/tab_state0

にアクセスしたらtab_state0、URLを抽出します。

LC_ALL=C grep -a -o 'http[[:print:]]*' tab_state0

1

simonsanによる最新の回答は、現在のChromeビルドで機能していません75.0.3770.100vbox投稿されたすべてのスクリプトで使用されているクラスがないため、現在動作しているコードを作成できました。

tabs = document.querySelectorAll('#devices div /deep/ div /deep/ div /deep/ div /deep/ .row')
str = '';
for (i=0;i<tabs.length;i++){
  if (tabs[i].querySelector('.name').innerText != null){
    str += '- ['+tabs[i].querySelector('.name').innerText + '] (' + tabs[i].querySelector('.url').innerText +  ')\n'
  } else {
    console.log(tabs[i])
  }
}

Louis Maddoxの投稿とスクリーンショットは、彼のスクリプトを解読するのに非常に役立つことがわかった ので、ここに更新されたツリーがあります。

スクリーンショット


とにかく、100文字の上限を克服するために提案された解決策は私にとってはうまくいかなかったのでinspect.js、次の手順に従ってソースから編集することにしました:

  1. chrome-pak-customizerをダウンロードして解凍します。
  2. C:\Program Files (x86)\Google\Chrome\Application\75.0.3770.100(ここで、75.0.3770.100ビルドの名前です)のコピーを作成しresources.pak、あなたのドキュメントフォルダを、ドラッグ&コピーして上にドロップしunpack.bat、解凍したフォルダに。
  3. \document\resources_unpaked\取る11208.jsと、それを開きます。
  4. 537行目または探し100てこれらの行があります
  let text = value ? String(value) : '';
  if (text.length > 100) {
    text = text.substring(0, 100) + '\u2026';
  }

changing the 100 to 300 should be enough, it may cuts some google search links but mine where still working.
  1. ファイルを保存し、同じフォルダにをドラッグアンドpak_index.iniドロップしpak.batます。今resource.pakでは\documents\変更で更新されました。
  2. resource.pak知らないのでバックアップを作成し、Chromeを閉じて元のバージョンを更新したバージョンに置き換えます。

これで、スクリプトはURLに対して最大300文字を表示します。


0

Windowsでtab_state0、TitaniumBackupアーカイブから抽出する(ルート化された電話で機能する)

7z e TitaniumB\com.android.chrome-20180918-001302.tar.gz -so | 7z e -si -ttar tab_state0 -r

タブのリストを取得するには tab_state0

sed -b "s/^.\{20\}//g" tab_state0 | sed -b "s/.\{6\}http/\nhttp/g" > my-tabs.md

窓に私はインストールしますhttps://scoop.sh/その後、scoop install busybox 7zip


-1

これはあなたが探している答えではありませんが、:

  1. Googleでダミーアカウントを作成する

  2. Androidデバイスにログインし、同期を有効にします

  3. デスクトップにログインして同期を有効にする

  4. Session Buddy拡張機能をデスクトップにインストールする

  5. エクスポートタブ


5
OPが彼の質問で述べたように、Chromeの同期機能は、Androidスマートフォンで開いているすべてのタブを取得していません。–それはどのように役立つのでしょうか?提案されたソリューションは不完全な同期の後にエクスポートされるため、OPの要求どおりにすべてのタブがエクスポートされることはありません。
イジー
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.