Açık Chrome sekmelerinin listesini nasıl verebilirim?


44

Chrome'un senkronizasyon özelliği Android telefonumda açık olan tüm sekmeleri almıyor.

Sekmeler erişebileceğim bir yerde bir dosyada mı saklanıyor?

Amacım, cihazların fabrika ayarlarına sıfırlama işlemini yapabilmem için sekmeler listesini vermektir.

Android 4.3 çalıştırma


Keşke bu amaç için bir eklenti olsaydı.
AslaMind9

Bunu yapmanın bağımsız ve köksüz bir yolu olmalı. Çünkü bootloader siliyor. Bootloader'ı silip kim baş ağrısını silerse derhal ateşlenmelidir. Bootloader bir tuzaktır. Kilit açma, birisini tüm verileri yok etmeye zorlar ve bazı parçalar ilk başta açılmadan yedeklenemez. Kısır döngü. Ve sonra şifreleme ve ARM TrustZone baş ağrısı da var.
aslaMind9

Yanıtlar:


35

Cihazdaki Chrome'a ​​bağlanmak ve sekmelere erişmek için Chrome hata ayıklayıcısındaki Uzak Cihazlar özelliğini kullanabilirsiniz. Yalnızca tam listeyi görmek için görünen sekmeler listesini genişletin ve gösterilen her şeyi (URL'ler dahil) panoya vurgulayın ve kopyalayın: https://developers.google.com/web/tools/chrome-devtools/remote-debugging/

Sadece bu şekilde ~ 400 sekme ihracat başardı.


3
onlar çok uzunsa krom ayıklayıcı liste böylece yerine kopyalamaya karşı yapıştırma yerine, url doğrudan yöntemini kullanıyor alabilirsiniz URL'ler kısaltır belirtmek istedim Louis Maddox'ın cevabı
woojoo666

@ woojoo666: Chrome'daki şeyler değişti gibi görünüyor ve şimdi Louis'in yanıtı birçok URL'nin sonunu daraltıyor. 100 karakteri aşan herhangi bir URL'ye benziyor - ki bu benim durumumda tüm açık sekmelerimin yaklaşık% 50'si - sonunu kaçıracak.
peterflynn

@peterflynn hala benim için çalışıyor. Sadece 432 karakter uzunluğunda bir url verdim. Sadece emin olmak için açılır pencerede bir açılır pencere açın, "uzak cihazlar" bölmesine gidin, ardından ikinci bir dev-tools penceresi açmak için ctrl-shift-J tuşunu kullanın ve ardından sağlanan komut dosyasını kullanın. burada doğru mu?
woojoo666

Bunu yapmak için gerekli minimum Android sürümü nedir?
AslaMind9

Keşke bunu yapmanın bağımsız bir yolu olsaydı. Dış yöntemlere güvenmeden. Biliyorum, Kök sekme listesi var, ancak insanlar bazı arıza riski olduğunu söylediği için cep telefonum köklü değil.
aslaMind9

25

Jeremy'nin yukarıdaki cevabını takdir etmek için bu StackExchange'e katıldım ve aynı zamanda sekmeler listesini dışa aktarmak için kullandığım birkaç satır JS'yi de ekledik (imleçle kopyalamak ideal değildir!)

Jeremy'nin dediği gibi, Chrome devtools simgesinin Remote devicesaltında (panelin sağ üst kısmında) seçim yapın:More tools

  • telefonunuzda USB hata ayıklamasını ayarlama ( Settings⇒ altında Developer options, root gerekli değil)
    • Developer optionsMenüyü etkinleştirmeniz gerektiğini unutmayın, kullanıcıları korumak için varsayılan olarak gizlenir.
    • Telefonumda bu altında yapı numarası birden çok kez dokunarak gerekli SettingsAbout Device
  • Bu yapıldıktan sonra USB'nizi takın ve MTP bağlantısına izin verin.
  • Chrome cihaz uzaktan kumanda panelini açtığında, telefon USB hata ayıklamasına izin vermeyi isteyecektir.
    • bilgisayara her zaman güvenmeyi seçebilirsin

Şimdi cihaz bağlı

  • Remote devicesJavaScript kullanarak sekmeler listesini alabilmek için seçtiğiniz devtools görünümünde bir 2. devtools görünümü açın
    • Bunu kaldırabilmek için açılır modda devtoolsun olması gerektiğini (panelin sağ üst köşesindeki dikey elips sembolünü kullanın) unutmayın, aksi halde Command + Option + J (MAC) Ctrl+ Shift+ J(WINDOWS) kapanacaktır. ilk devtools paneli.
  • 'Daha fazlasını göster'i tıklayarak listeyi ilk birkaç öğeden tüm sekmelere kadar genişletin
  • Listeye karşı komut yazmak için, aşağıdaki 2. kod satırını kullanın (2. devtools penceresinin konsoluna girildi)
    • NB /deep/, #shadow-rootDOM öğelerini girmek için CSS seçicisidir

Android için Chrome'da açık olan tüm URL'lerin bir listesini vermek için, listeyi yalnızca bir biçimlendirme biçimlendirilmiş metin dizesine dönüştürmeyi ve panoya kopyalamayı seçtim.

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)

Daha sonra panonuzda şöyle görünen bir liste olacaktır:

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

Güncelleme

Bazı nedenlerden dolayı , bir maddenin özniteliğini alamadığını söylerken bazı hatalar alıyorum (inceleyince, görünmeyen bir düğüm, kim bilir). Bunu atlatmak için bunun yerine bu sürümü kullanın: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 değişti, 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}))şimdi çalışacak
dlamotte

Bu tekniği kullanarak, 100 karakterden uzun olan herhangi bir URL'nin sonunun kesileceğini unutmayın.
peterflynn

@peterflynn hala benim için çalışıyor. Daha önce 432 karakterlik bir url verdim. Sağlanan diamotte betiğini kullandığınızdan emin olun
woojoo666

1
Yine değişti. "73.0.3683.75 (Official Build) (64-bit)" Chrome Sürümü için ": 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')}))(Son gölge köküne bir seçiciyle erişemedim, ancak .shadowRootbunun yerine ana öğe öğesinin özelliğini kullanmak zorunda kaldım . hey, desteksiz
Adrian

1
Başka birinin sorunu olması durumunda, bu komut dosyalarının bazılarını çalıştırırken sorun yaşıyordum (çekmeden önce 10+ dakika içinde% 100 kullanımla birlikte çekirdek USB yığınını kırıyordu). Bulduğum en iyi yol, chrome dev tools müfettişindeki ana HTML öğesini seçmekti (listedeki rastgele bir öğeyi seçmek ve sonra ana öğeyi seçmek için iç içe dev araçlar penceresinin sol üstündeki imleç düğmesini kullanın) ve ardından sağ tıklayın -> "HTML olarak düzenle" -> başka bir metin dosyasına kopyalayın. Ardından, yukarıdaki komut dosyalarını o yerel HTML kopyası (veya BASH) üzerinde çalışmak üzere uyarlamak daha kolay ve daha hızlıydı
JZL003

13

Tarayıcım bir gün düştükten sonra kalıcı olarak kapatılan sekmeleri kurtarmayı ararken bu çözüme rastladım. İhtiyacınız olan bilgilere erişmek için cihazınızın köklü olması gerekir, böylece cihazınızda yüklü olan kök dosyalara erişime sahip bir dosya gezgini uygulaması çalıştırabilirsiniz. ES Dosya Gezgini veya Kök Gezgini benim önerilerim.

  1. Cihazınızın kök klasörüne gidin (korunan sistem bölümü) → seç DATA→ seç com.android.chrome.

  2. Geçerli sekmeleriniz hakkında bilgi bulabileceğiniz birkaç yer var.

    1. Kontrol edilecek ilk klasör app_tabso zaman 0. Bu klasörde tab_state, mevcut tüm sekmelerinizin bir listesini içeren bir dosya bulunmalıdır .
    2. Bu klasörde tab3, tab4mevcut sekmeler hakkında bilgi içeren, vb. Adında başka dosyalar da var .
    3. IMO, kodlama farklı olduğundan, bu dosyaların bazılarının içeriğini okumak için özel bir "metin editörü / sql editörüne" ihtiyacınız var.
  3. Bakılacak bir sonraki yer /data/com.android.chrome/app_chrome/Default/. Bu klasörde adında bir dosya bulacaksınız History. Durumunuza bağlı olarak, burada son site ziyaretlerinin iyi bir listesini bulabilirsiniz.

  4. Son olarak, adresine gidin Sync Data folder. Burada, Google ile senkronize edilen bilgileri bulacaksınız (bu, şu anda diğer cihazlarda senkronize ettiğiniz tüm sekmeleri içermelidir).

    • Dosyada SyncData.sqlite3, tüm Google aramalarınızın bir geçmişini de bulabilirsiniz (ki bazen ilginç bir okuma buluyorum).
    • Bu dosyayı okumak için PC'nizde bir Sqlite3 veri tarayıcı programına ihtiyacınız olacak . Uygulamanın , MS Excel'de açabileceğiniz yüksek oranda kullanılabilir .CSVveya .XLSdosyaya verebilmesi gerekir .

Bu benim varsaydığım birine yardımcı olabilir.


5

Eğer varsa Android komut satırı araçlarını geliştirme makinede yüklü ve Android cihazınızda ayıklama USB sağladı, o zaman aşağıdakileri yapabilirsiniz:

  • Yürütme adb forward tcp:9222 localabstract:chrome_devtools_remotegeliştirme makinenizde.

    Chrome örnekleri, " " soyut adresli bir unix etki alanı soketi üzerinden bir hata ayıklama protokolüne erişim sağlar chrome_devtools_remote- yukarıdaki adb komutu, istekleri bu yuvaya bağlantı noktası 9222'ye iletir. (Yazarak Android cihazdaki tüm unix alan soketlerinin bir listesini alabilirsiniz adb shell cat /proc/net/unix.)

  • Hata ayıklama protokolü, chrome örneği hakkındaki JSON verilerini HTTP üzerinden gösterir. Açık sekmeleri listeleyen bir JSON dosyası çalıştırılarak alınabilir wget -O tabs.json http://localhost:9222/json/list.

    (API'nin diğer bitiş noktaları https://github.com/buggerjs/bugger-daemon/blob/master/README.md#api adresinde bulunabilir .)

Bkz burada USB hata ayıklama sağlayan ve daha fazla ayrıntı için buraya nasıl çalıştığını genel bir bakış için.


2

Bu geçici çözüm, Android için Chrome'da açtığınız tüm sekmeler için ayrı ayrı URL’lere sahip bir metin dosyası sağlayacaktır.

  1. Bu belirtildiği gibi cevap tarafından Michael , geçerli sekmeleri içeren dosyayı kapmak gerekir. Aygıtta bir kök gezgini kullanarak, bu dosyayı alın ve pencerelerdeki istediğiniz klasöre taşıyın:/data/data/com.android.chrome/app_tabs/0/tab_state

  2. Windows için GNU Araçları'nı yükleyin

  3. Bazen dosyada betiği bozan tuhaf bir ok karakteri vardır. Komut dosyasını çalıştırırsanız ve dosyanın bir kısmını keserse, son karaktere bakın ve muhtemelen o tuhaf ok karakteri olacaktır. Orijinal dosyada bulun / değiştirin. Bir kez o gitti, senaryo iyi çalışacak. Bu gibi görünüyor:-->

  4. Komut satırı istemine gidin ("Çalıştır" veya Win+ 'ya gidin Rve yazın cmd) ve içeren klasöre gidin sed.exe(2. adımda nereye yüklediyseniz)

  5. Muhtemelen orijinal dosyayı ( tab_state) içeren aynı klasöre taşımak isteyeceksiniz sed.exe. Her şeyi kolaylaştıracak. Bunu yaptıktan sonra bu betiği çalıştırın:

    sed -i "s/.\{6\}http/\r\n\r\nhttp/g" tab_state
    
  6. Bu, dosyayı tüm URL'lerin doğru şekilde biçimlendirildiği şekilde değiştirecektir. Dosyayı metin dosyası olarak açın ve ardından içeriği bir Word belgesine veya başka bir konuma kopyalayıp yapıştırın. Herhangi bir nedenle, verileri kopyalayıp yapıştırmazsanız, dosyayı kaydettiğinizde tüm satır sonları / satırbaşlarını siler. Eğer işler batırırsa, tekrar başlayın ve tekrar yapın. Hepsi söylendiğinde ve yapıldığında, daha önce açmış olduğunuz tüm sekmelere bağlantıların listesini içeren bir dosyanız olmalıdır.


2

Konsoldaki kodu Louis Maddox'tan değiştirebilirsin, bununla bugün çalışıyor Version 0.66.99 Chromium: 75.0.3770.100. Not: Uzak cihaz penceresini etkinleştirdiyseniz veCtrl+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)

Sonra tüm sekmelerinizi bir metin dosyasına yapıştırabilirsiniz.

Gerçek cihazınızdaki tüm sekmeleri açmak istiyorsanız, tabs.forEach-part ile değiştirin.

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

Yine de, cihazınızda çok fazla açık sekme ile bunu denemeyin.

tabsAçılan sekmeleri manuel olarak senkronize etmek için bu bölümden sonra bunu ekledim (cesur hala bu özelliği eksik ve mobil aygıtımda 650 tane açılan sekme vardı): 50 sekme:

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

Bu, açılan tarayıcı penceresine cihazınızdan 50 sekmeden oluşan bir grubu açar. Ayrıca toplam sekme sayısını gösterir. Ancak, başka bir toplu iş açmak istiyorsanız, bu geliştirici araçları ve uzak cihaz için kalan 'boş' sekmeyi kapatmayın. İle Ctrl + TABSekmeler arasında geçiş Ctrl +Donları favori etmek ve Ctrl+Waktif sekmeyi kapatmak için. Manuel olarak yaptım, herkesin hayatını kolaylaştırmak için bu kodda değişiklik önermek için çekinmeyin.


1

Michael tab_state dosyasını tanımladı, kodunu çözmek için kaldı. Aşağıdaki senaryo benim için çalıştı (sette KSH_VERSION = '@ (#) MIRBSD KSH R43 2013/02/19' ya da xenial BASH_VERSION = '4.3.46 (1) - Chrome 49.0.2623.105’teki bir tab_state dosyasında yayınlanacak), ilk olarak son URL’yi yazdırır, URL’ler arasında yazdırılamayan baytları ve sonraki tüm baytları kaldırır, ve gerekirse daha fazla 2 bayt çıkarılır. Her URL'nin ardından bir boşluk, ardından kaldırılan bitişik yazdırılabilir bayt varsa, sonra virgül, sonra kaldırılan diğer baytların sayısı (& parantez içindeki belirtilen bayt). URL'leri yazdırmak için bunun yerine sadece yorumlu echo komutunu kullanın.

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

Okumak için root veya Chrome olmanız gerekir /data/data/com.android.chrome/app_tabs/0/tab_state0

Chrome'u kullanmak ve ekli bir cihazdan almak için bu dirtycow istismarını savunmasız cihazlarda kullanabilirsiniz 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

Erişime sahip olduktan sonra tab_state0, URL’leri çıkartın:

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

1

Simonsan'ın en son cevabı şu anki Chrome derlemem üzerinde çalışmıyor 75.0.3770.100. vboxGönderilen her komut dosyasında kullanılan sınıfa sahip değilim , bu yüzden şu anda çalışan bir kod yazmayı başardım:

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'un gönderisini ve ekran görüntülerini senaryosunu deşifre etmek için çok faydalı buldum , bu yüzden burada güncellenmiş ağacı olan benim.

ekran görüntüsü


Her neyse, 100 karakter sınırının üstesinden gelmek için önerilen çözümler benim için işe yaramadı, bu yüzden inspect.jsaşağıdaki adımları izleyerek kaynaktan düzenlemeye karar verdim :

  1. İndir krom pak-özelleştiricinizi ve sıkıştırılmış dosyayı açın.
  2. Buradan C:\Program Files (x86)\Google\Chrome\Application\75.0.3770.100( 75.0.3770.100derlemenin adı) resources.pakBelgeler klasörünüzün bir kopyasını alın, kopyayı sürükleyin ve unpack.batsıkıştırılmış klasörün üzerine bırakın .
  3. In \document\resources_unpaked\almak 11208.jsve açın.
  4. 537 hattında veya 100bu satırları arayarak
  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. Dosyayı kaydedin ve aynı klasöre sürükleyip pak_index.inibırakın pak.bat. Şimdi resource.pakde \documents\değişikliklerle güncellendi.
  2. resource.pakAsla bilmediğinizden, Chrome'u kapatıp orjinali güncellenmiş sürümle değiştirdiğinizden yedekleyin .

Şimdi komut dosyası, URL'ler için 300 karakter gösterecek.


0

Pencerelerde, tab_state0bir TitaniumBackup arşivinden (köklü telefonlar üzerinden çalışan)

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

Sekmelerin listesini almak için tab_state0

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

Pencerelerde ben yükleyecek https://scoop.sh/ sonrascoop install busybox 7zip


-1

Aradığın cevap bu değil, ama:

  1. Google'da sahte hesap oluşturun

  2. Android cihazda oturum açın ve senkronizasyonu etkinleştirin

  3. Masaüstünde oturum açın ve senkronizasyonu etkinleştirin

  4. Masaüstünde Oturum Buddy uzantısını yükleyin

  5. Sekmeleri dışa aktar


5
OP sorusunda belirtildiği gibi: Chrome'un senkronizasyon özelliği Android telefonumdaki tüm sekmeleri açmıyor. - bu nasıl yardımcı olmalı? Önerilen çözümünüz eksik senkronizasyondan sonra dışa aktarır , bu nedenle OP tarafından istenen tüm sekmeleri dışa aktarmaz.
Izzy
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.