Bagaimana saya bisa mengekspor daftar tab Chrome yang terbuka?

44

Fitur sinkronisasi Chrome tidak mengambil semua tab yang terbuka di ponsel Android saya.

Apakah tab disimpan dalam file di suatu tempat yang dapat saya akses?

Tujuan saya adalah untuk mengekspor daftar tab sehingga saya dapat menjalankan pengaturan ulang pabrik pada perangkat.

Menjalankan Android 4.3

Majjo
sumber
Saya berharap ada add-on untuk tujuan itu.
neverMind9
Seharusnya ada cara tak menentu mandiri untuk melakukannya. Karena bootloader dihapus. Siapa pun yang menemukan bootloader menghapus sakit kepala harus segera dipecat. Bootloader adalah jebakan. Membuka kunci itu memaksa seseorang untuk melenyapkan seluruh data, dan beberapa bagian tidak dapat dicadangkan tanpa membuka kunci di tempat pertama. Lingkaran setan. Dan kemudian ada enkripsi dan sakit kepala ARM TrustZone juga.
neverMind9

Jawaban:

35

Anda dapat menggunakan fitur Perangkat Jarak Jauh di debugger Chrome untuk terhubung ke Chrome di perangkat dan mengakses tab. Cukup rentangkan daftar tab yang terlihat untuk mendapatkan daftar lengkap dan kemudian sorot & salin semua yang ditampilkan (termasuk URL) ke papan klip: https://developers.google.com/web/tools/chrome-devtools/remote-debugging/

Saya baru saja berhasil mengekspor ~ 400 tab dengan cara ini.

Jeremy Taylor
sumber
3
ingin menyebutkan bahwa daftar debugger krom akan mempersingkat url jika terlalu panjang, jadi alih-alih menyalin, Anda dapat memperoleh url secara langsung menggunakan metode dalam jawaban Louis Maddox
woojoo666
@ woojoo666: Sepertinya hal-hal di Chrome telah berubah dan sekarang jawaban Louis juga memotong akhir banyak URL. Sepertinya URL apa pun yang lebih dari 100 karakter - yang dalam kasus saya ini adalah sekitar 50% dari semua tab terbuka saya - akan hilang bagian akhirnya.
peterflynn
@peterflynn masih bekerja untuk saya. Baru saja mengekspor url yang panjangnya 432 karakter. Hanya untuk memastikan, Anda membuka alat dev di jendela sembulan, pergi ke panel "perangkat jarak jauh", kemudian menggunakan ctrl-shift-J untuk membuka jendela alat dev kedua, dan kemudian menggunakan skrip yang disediakan di sini , benar?
woojoo666
Berapa minimum versi Android yang diperlukan untuk melakukan ini?
neverMind9
Saya berharap ada cara mandiri untuk melakukannya. Tanpa mengandalkan metode eksternal. Saya tahu, ada daftar tab Root, tetapi ponsel saya tidak di-rooting karena orang mengatakan ada risiko kegagalan fungsi.
neverMind9
25

Baru saja bergabung dengan StackExchange ini untuk menunjukkan apresiasi atas jawaban Jeremy di atas, dan juga menambahkan beberapa baris JS yang saya gunakan untuk mengekspor daftar tab (karena menyalin dengan kursor tidak ideal!)

Seperti kata Jeremy, pilih di Remote devicesbawah ikon More toolsChrome devtools (kanan atas panel):

  • mengatur USB debugging di ponsel Anda (di bawah SettingsDeveloper options, root tidak diperlukan)
    • perhatikan bahwa Anda harus mengaktifkan Developer optionsmenu, itu disembunyikan secara default untuk melindungi pengguna
    • pada ponsel saya ini diperlukan beberapa kali mengetuk nomor build di bawah SettingsAbout Device
  • setelah ini selesai, colokkan USB Anda dan biarkan koneksi MTP
  • ketika panel perangkat remote devtools Chrome terbuka, telepon kemudian akan meminta untuk mengizinkan USB debugging
    • Anda dapat memilih untuk selalu mempercayai komputer

Sekarang perangkat terhubung,

  • buka tampilan devtools kedua pada tampilan devtools dari mana Anda memilih Remote devicesuntuk dapat mengambil daftar tab menggunakan JavaScript
    • Perhatikan bahwa Anda harus memiliki devtools dalam mode pop-out (gunakan simbol elipsis vertikal di kanan atas panel) untuk bisa mendapatkan ini, jika tidak Command + Option + J (MAC) Ctrl+ Shift+ J(WINDOWS) hanya akan menutup panel devtools pertama.
  • perluas daftar dari beberapa item pertama ke semua tab dengan mengklik 'Tampilkan lebih banyak'
  • untuk skrip terhadap daftar, gunakan beberapa baris kode berikut [dimasukkan di konsol jendela devtool 2]
    • NB /deep/adalah pemilih CSS untuk memasukkan #shadow-rootelemen DOM

Untuk mengekspor daftar semua URL yang terbuka di Chrome untuk Android, saya memilih untuk membuat daftar itu menjadi string teks yang diformat dengan penurunan harga dan menyalinnya ke clipboard

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)

Anda kemudian akan memiliki daftar di clipboard Anda terlihat seperti ini:

[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)
...

Memperbarui

Untuk beberapa alasan saya mendapatkan kesalahan beberapa waktu , mengatakan gagal untuk mendapatkan hrefatribut dari suatu nullitem (ketika saya memeriksanya itu adalah simpul yang tidak terlihat, siapa tahu). Untuk menyiasatinya, gunakan versi ini sebagai gantinya:

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)
Louis Maddox
sumber
1
Chrome berubah, 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}))akan berfungsi sekarang
dlamotte
Perhatikan bahwa menggunakan teknik ini, URL apa pun yang panjangnya lebih dari 100 karakter akan berakhir.
peterflynn
@peterflynn masih bekerja untuk saya. Saya baru saja mengekspor url yang berjumlah 432 karakter. Pastikan Anda menggunakan skrip yang disediakan
diamotte
1
Itu berubah lagi. Untuk Versi Chrome "73.0.3683.75 (Pembuatan Resmi) (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')}))(Saya tidak bisa mengakses root shadow terakhir melalui pemilih, tetapi harus menggunakan .shadowRootproperti elemen hostnya sebagai gantinya. Tidak tahu persis mengapa, tetapi hei, tidak didukung
Adrian
1
Kalau-kalau ada orang lain mengalami masalah, saya mengalami masalah menjalankan beberapa skrip ini (itu memalu tumpukan USB kernel dengan 100% penggunaan lebih dari 10 menit sebelum saya menghentikannya). Cara terbaik yang saya temukan adalah memilih elemen HTML induk di inspektur alat dev krom (gunakan tombol kursor di kiri atas jendela alat dev bersarang untuk memilih item acak dalam daftar dan kemudian pilih elemen induk) dan kemudian klik kanan -> "Edit sebagai HTML" -> salin ke file teks lain. Maka lebih mudah dan lebih cepat untuk mengadaptasi skrip di atas untuk bekerja pada salinan HTML lokal (atau BASH)
JZL003
13

Saya menemukan solusi ini ketika saya mencari untuk memulihkan tab yang telah ditutup secara permanen setelah satu hari browser saya mogok. Untuk mengakses informasi yang Anda butuhkan, perangkat Anda harus di-rooting sehingga Anda dapat menjalankan aplikasi file explorer dengan akses ke file root yang diinstal pada perangkat Anda. ES File Explorer atau Root Explorer adalah rekomendasi saya.

  1. Arahkan ke folder root perangkat Anda (partisi sistem yang dilindungi) → pilih DATA→ pilih com.android.chrome.

  2. Ada beberapa tempat di mana Anda dapat menemukan informasi tentang tab Anda saat ini.

    1. Folder pertama yang diperiksa adalah app_tabs, lalu 0. Di folder ini harus ada file bernama tab_stateyang berisi daftar semua tab Anda saat ini.
    2. Ada juga file lain dalam folder ini disebut tab3, tab4, dll yang berisi info tentang tab saat ini.
    3. IMO, Anda memerlukan "editor teks / editor sql" khusus untuk membaca konten beberapa file ini karena pengkodeannya berbeda.
  3. Tempat berikutnya untuk melihat adalah /data/com.android.chrome/app_chrome/Default/. Di folder ini Anda akan menemukan file bernama History. Bergantung pada situasi Anda, Anda dapat menemukan daftar kunjungan situs terbaru di sini.

  4. Akhirnya, navigasikan ke menu Sync Data folder. Di sini, Anda akan menemukan informasi yang sedang disinkronkan ke Google (dan ini harus mencakup semua tab yang saat ini Anda sinkronkan di perangkat lain).

    • Dalam file tersebut SyncData.sqlite3, Anda juga akan menemukan riwayat semua pencarian Google Anda (yang terkadang saya temukan sebagai bacaan yang menarik).
    • Anda memerlukan program browser data Sqlite3 di PC Anda untuk membaca file ini. Aplikasi harus dapat mengekspor ke file yang sangat bermanfaat .CSVatau .XLSyang dapat Anda buka di MS Excel .

Ini bisa membantu seseorang yang saya kira.

Michael
sumber
5

Jika Anda memiliki alat baris perintah Android yang diinstal pada mesin pengembangan, dan telah mengaktifkan USB debugging pada perangkat Android Anda, maka Anda dapat melakukan hal berikut:

  • Jalankan adb forward tcp:9222 localabstract:chrome_devtools_remotemesin pengembangan Anda.

    Mesin virtual Chrome membuka akses ke protokol debugging melalui soket domain unix dengan alamat abstrak " chrome_devtools_remote" - perintah adb di atas meneruskan permintaan ke port 9222, beralih ke soket itu. (Anda bisa mendapatkan daftar semua soket domain unix di perangkat Android dengan mengetik adb shell cat /proc/net/unix.)

  • Protokol debugging memperlihatkan data JSON tentang instance chrome melalui HTTP. File JSON yang mencantumkan tab terbuka dapat diperoleh dengan mengeksekusi wget -O tabs.json http://localhost:9222/json/list.

    (Titik akhir API lainnya dapat ditemukan di https://github.com/buggerjs/bugger-daemon/blob/master/README.md#api .)

Lihat di sini untuk detail lebih lanjut tentang mengaktifkan debugging USB, dan di sini untuk ikhtisar tentang cara kerjanya.

phlummox
sumber
2

Solusi ini akan memberi Anda file teks dengan URL individual untuk semua tab yang Anda buka di Chrome untuk Android.

  1. Seperti disebutkan dalam jawaban ini oleh Michael , Anda harus mengambil file yang berisi tab saat ini. Menggunakan root explorer di perangkat, ambil file ini dan pindahkan ke folder pilihan Anda di windows:/data/data/com.android.chrome/app_tabs/0/tab_state

  2. Instal Alat GNU untuk Windows

  3. Terkadang ada karakter panah aneh dalam file yang mengacaukan skrip. Jika Anda menjalankan skrip dan memotong sebagian file, lihat karakter terakhir dan mungkin karakter panah aneh itu. Temukan / ganti di file asli. Setelah hilang, skrip akan berjalan dengan baik. Ini terlihat seperti ini:-->

  4. Pergi ke command line prompt (pergi ke "Run" atau Win+ R, dan ketik cmd) dan arahkan ke folder yang berisi sed.exe(di mana pun Anda menginstalnya di langkah 2.)

  5. Anda mungkin ingin memindahkan file asli ( tab_state) ke folder yang sama sed.exe. Itu akan membuat segalanya lebih mudah. Setelah Anda selesai melakukannya, jalankan skrip ini:

    sed -i "s/.\{6\}http/\r\n\r\nhttp/g" tab_state
    
  6. Ini akan memodifikasi file dengan semua URL diformat dengan benar. Buka file sebagai file teks dan kemudian salin dan tempel konten ke dokumen Word atau lokasi lain. Untuk beberapa alasan, jika Anda tidak menyalin dan menempelkan data, ketika Anda menyimpan file itu akan menghapus semua pengembalian baris / carriage. Jika semuanya kacau, mulailah dari awal dan lakukan lagi. Setelah semuanya dikatakan dan dilakukan, Anda harus memiliki file yang berisi daftar tautan ke semua tab yang telah Anda buka sebelumnya.

Darren
sumber
2

Anda dapat mengganti kode di konsol dari Louis Maddox dengan yang ini, ini berfungsi mulai hari ini Version 0.66.99 Chromium: 75.0.3770.100. Catatan: Anda dapat membuka jendela konsol baru dari jendela perangkat jarak jauh jika Anda mengaktifkan jendela perangkat jarak jauh dan menekanCtrl+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)

Kemudian Anda bisa menempelkan semua tab Anda di file teks.

Jika Anda ingin membuka semua tab pada perangkat Anda yang sebenarnya, ganti tabs.forEach-part dengan

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

Jangan mencobanya dengan terlalu banyak tab terbuka di perangkat Anda.

Saya menambahkan ini setelah tabsbagian untuk menyinkronkan tab yang dibuka secara manual (berani masih kehilangan fitur ini dan saya memiliki 650 tab yang dibuka pada perangkat seluler saya) dengan biaya 50 tab:

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

Ini akan membuka kumpulan 50 tab dari perangkat Anda ke dalam jendela browser yang terbuka. Itu juga menunjukkan jumlah tab keseluruhan. Jangan tutup tab 'kosong' yang tersisa untuk alat-alat pengembang dan perangkat jarak jauh, jika Anda ingin membuka kumpulan lain. Dengan Ctrl + TABAnda beralih melalui tab, Ctrl +Duntuk menandai mereka dan Ctrl+Wuntuk menutup tab aktif. Itulah cara saya melakukannya secara manual, merasa bebas untuk mengusulkan perubahan pada kode ini untuk membuat hidup semua orang lebih mudah.

simonsan
sumber
1

Michael mengidentifikasi file tab_state, masih harus mendekodekannya. Skrip berikut berfungsi untuk saya (dalam kitkat KSH_VERSION = '@ (#) MIRBSD KSH R43 2013/02/19' atau BASH_VERSION xenial = '4.3.46 (1) -dilepaskan' pada file tab_state dari Chrome 49.0.2623.105), itu mencetak URL terakhir terlebih dahulu, antara URL itu menghapus byte yang tidak diinginkan dan semua byte berikutnya, dan lebih banyak jika diperlukan sehingga setidaknya 2 byte dihapus. Mengikuti setiap URL, ia mencetak spasi, kemudian byte yang dapat dicetak yang dihapus yang bersebelahan jika ada, lalu koma, lalu jumlah byte lainnya yang dihapus (& kata byte di dalam tanda kurung). Untuk mencetak URL hanya gunakan perintah gema yang dikomentari saja.

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
gregrwm
sumber
1

Anda harus root atau Chrome untuk membaca /data/data/com.android.chrome/app_tabs/0/tab_state0

Anda dapat menggunakan exploit kotor ini pada perangkat yang rentan untuk menjadi Chrome dan mendapatkan tab_state0dari perangkat yang terpasang:

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

Setelah Anda memiliki akses tab_state0, ekstrak URL:

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

Jawaban terbaru oleh simonsan tidak berfungsi pada build Chrome saya saat ini 75.0.3770.100. Saya tidak memiliki vboxkelas yang digunakan di setiap skrip yang diposting, jadi saya berhasil menulis kode yang berfungsi sekarang:

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])
  }
}

Saya menemukan tulisan dan tangkapan layar Louis Maddox sangat berguna untuk menguraikan skripnya, jadi inilah milik saya dengan pohon yang diperbarui.

tangkapan layar


Bagaimanapun solusi yang diusulkan untuk mengatasi 100 char cap tidak bekerja untuk saya karena itu saya memutuskan untuk mengedit inspect.jsdari sumber berikut langkah-langkah berikut:

  1. Unduh chrome-pak-customizer dan unzip.
  2. Dari C:\Program Files (x86)\Google\Chrome\Application\75.0.3770.100(di mana 75.0.3770.100nama build) buat salinan di resources.pakdalam folder Documents Anda, seret salinannya dan letakkan unpack.batdi dalam folder yang tidak di-zip.
  3. Dalam \document\resources_unpaked\mengambil 11208.jsdan membukanya.
  4. Pada baris 537 atau dengan mencari 100ada garis-garis ini
  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. Simpan file dan di folder yang sama seret pak_index.inidan letakkan di folder pak.bat. sekarang resource.pakin \documents\telah diperbarui dengan perubahan.
  2. Buat cadangan resource.pakkarena Anda tidak pernah tahu, tutup Chrome dan ganti yang asli dengan versi yang diperbarui.

Sekarang skrip akan menampilkan hingga 300 karakter untuk url.

priorincantatio
sumber
0

Di windows, untuk mengekstrak tab_state0dari arsip TitaniumBackup (yang berfungsi pada ponsel yang di-rooting)

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

Untuk mendapatkan daftar tab tab_state0

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

Di windows saya akan menginstal https://scoop.sh/ laluscoop install busybox 7zip

raisercostin
sumber
-1

Ini bukan jawaban yang Anda cari, tetapi:

  1. Buat akun dummy di Google

  2. Login di perangkat Android dan aktifkan sinkronisasi

  3. Login di desktop dan aktifkan sinkronisasi

  4. Instal ekstensi Session Buddy di desktop

  5. Ekspor tab

latigidigital
sumber
5
Seperti yang dinyatakan OP dalam pertanyaannya: Fitur sinkronisasi Chrome tidak mengambil semua tab yang terbuka di ponsel Android saya. - bagaimana seharusnya itu membantu? Solusi yang Anda sarankan ekspor setelah sinkronisasi tidak lengkap , sehingga tidak akan mengekspor semua tab seperti yang diminta oleh OP.
Izzy