Як я можу експортувати список відкритих вкладок 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: Схоже, що в Chrome змінилися речі, і відповідь Луї також скорочує кінець багатьох URL-адрес. Схоже, що будь-яка URL-адреса, що містить понад 100 символів - що, в моєму випадку, становить приблизно 50% усіх моїх відкритих вкладок - не пропустить її закінчення.
peterflynn

@peterflynn все ще працює на мене. Щойно експортовано URL-адресу, яка мала 432 символи. Щоб переконатися, ви відкриваєте інструменти розробників у спливаючому вікні, переходите до області "віддалених пристроїв", потім використовуєте ctrl-shift-J, щоб відкрити друге вікно інструментів розробки, а потім використовуєте наданий сценарій тут , правильно?
woojoo666

Який мінімум потрібна версія Android для цього?
neverMind9

Мені б хотілося, щоб це було окремим способом . Не покладаючись на зовнішні методи. Я знаю, є список вкладок Root, але мій мобільний телефон не вкорінюється, оскільки люди кажуть, що існує загроза певної несправності.
neverMind9

25

Щойно приєднавшись до цього StackExchange, щоб оцінити відповідь Джеремі вище, а також додати кілька рядків JS, які я використовував для експорту списку вкладок (оскільки копіювання курсором не ідеально!)

Як сказав Джеремі, виберіть Remote devicesпід значком More toolsDevtools Chrome (у верхній правій частині панелі):

  • налаштувати налагодження USB на телефоні (під SettingsDeveloper options, root не потрібно)
    • зауважте, що ви повинні ввімкнути Developer optionsменю, воно за замовчуванням приховане для захисту користувачів
    • на моєму телефоні для цього потрібно кілька разів натискати номер збірки під SettingsAbout Device
  • як тільки це буде зроблено, підключіть свій USB-модуль і дозвольте з'єднання MTP
  • коли панель віддалених пристроїв Chrome devtools відкрита, телефон запитає дозволити налагодження USB
    • ви можете завжди довіряти комп’ютеру

Тепер пристрій підключено,

  • відкрийте другий перегляд devtools на поданні devtools, з якого ви вибрали, Remote devicesщоб мати змогу отримати список вкладок за допомогою JavaScript
    • зауважте, що ви повинні мати програми devtools у спливаючому режимі (використовуйте символ вертикального еліпсиса у верхньому правому куті панелі), щоб мати змогу отримати це, інакше Command + Option + J (MAC) Ctrl+ Shift+ J(WINDOWS) просто закриється перша панель для розробників.
  • розгорніть список з перших кількох елементів на всі вкладки, натиснувши "Показати більше"
  • для скриптування списку використовуйте наступні рядки коду [введені в консолі 2-го вікна Devtools]
    • NB /deep/- це селектор CSS для введення #shadow-rootелементів DOM

Щоб експортувати список усіх URL-адрес, відкритих у Chrome для Android, я вирішив просто внести список у текстовий рядок відформатованого розмітки та скопіювати його у буфер обміну

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

Оновлення

Чомусь я отримую помилку деякий час , кажучи, що не вдалося отримати hrefатрибут nullелемента (коли я його перевіряю, це невидимий вузол, хто знає). Щоб обійти це питання, скористайтеся цією версією замість цього:

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

Зауважте, що за допомогою цієї методики будь-яка URL-адреса довжиною понад 100 символів закінчується.
peterflynn

@peterflynn все ще працює на мене. Я щойно експортував URL, який склав 432 символи. Переконайтеся, що ви використовуєте сценарій, який надав
diamotte

1
Він знову змінився. Для версії Chrome "73.0.3683.75 (Офіційна збірка) (64-розрядна)": 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
На всякий випадок, якщо хтось інший має проблеми, у мене виникли проблеми із виконанням деяких із цих сценаріїв (це забивало USB-стек ядра зі 100% використанням за 10+ хвилин, перш ніж я зупинив його). Найкращий спосіб, який я знайшов, - це вибрати батьківський елемент HTML у інспекторі інструментів хромованого розробника (за допомогою кнопки курсора у верхньому лівому куті вкладеного інструменту для вкладення програм виберіть випадковий елемент у списку, а потім виберіть батьківський елемент), а потім клацніть правою кнопкою миші -> "Редагувати як HTML" -> скопіювати в інший текстовий файл. Тоді було легше та набагато швидше адаптувати вищезазначені сценарії для роботи над локальною копією HTML (або BASH)
JZL003,

13

Я натрапив на це рішення, коли шукав відновити вкладки, які були назавжди закриті після того, як один день перервався браузер. Щоб отримати доступ до потрібної інформації, ваш пристрій потрібно вкорінити, щоб ви могли запустити програму провідника файлів з доступом до кореневих файлів, встановлених на вашому пристрої. ES File Explorer або Root Explorer - мої рекомендації.

  1. Перейдіть до кореневої папки вашого пристрою (захищений системний розділ) → виберіть DATA→ вибрати com.android.chrome.

  2. Є кілька місць, де ви можете знайти інформацію про свої поточні вкладки.

    1. Перша папка для перевірки є app_tabs, то 0. У цій папці має бути названий файл, tab_stateякий містить список усіх ваших поточних вкладок.
    2. Є також інші файли в цій папці називається tab3, tab4і т.д. , які містять інформацію про поточні вкладках.
    3. IMO, вам потрібен спеціальний "текстовий редактор / sql редактор", щоб прочитати вміст деяких із цих файлів, оскільки кодування відрізняється.
  3. Наступне місце, де потрібно подивитися /data/com.android.chrome/app_chrome/Default/. У цій папці ви знайдете файл з назвою History. Залежно від вашої ситуації, тут ви можете знайти хороший список останніх відвідувань сайту.

  4. Нарешті, перейдіть до пункту Sync Data folder. Тут ви знайдете інформацію, яка синхронізується з Google (і вона повинна включати всі вкладки, які ви синхронізували на інших пристроях).

    • У файлі SyncData.sqlite3ви також знайдете історію всіх ваших пошукових запитів у Google (що я часом вважаю цікавим для читання).
    • Вам буде потрібно браузер даних sqlite3 програма на вашому комп'ютері, щоб прочитати цей файл. Додаток повинен мати змогу експортувати на високопридатний файл .CSVабо .XLSфайл, який можна відкрити в MS Excel .

Це може бути корисним для того, хто я припускаю.


5

Якщо у вас на інструменті розробки встановлені інструменти командного рядка Android та увімкнено налагодження USB на пристрої Android, ви можете зробити наступне:

  • Виконайте adb forward tcp:9222 localabstract:chrome_devtools_remoteна своєму розробнику.

    Екземпляри Chrome відкривають доступ до протоколу налагодження через сокет домену unix з абстрактною адресою " chrome_devtools_remote" - вищевказана команда adb пересилає запити на порт 9222 на цей сокет. (Ви можете отримати список усіх розеток домену unix на пристрої Android, ввівши adb shell cat /proc/net/unix.)

  • Протокол налагодження відкриває дані JSON про хромований екземпляр через HTTP. Файл JSON із переліком відкритих вкладок можна отримати, виконавши wget -O tabs.json http://localhost:9222/json/list.

    (Інші кінцеві точки API можна знайти на веб-сторінці https://github.com/buggerjs/bugger-daemon/blob/master/README.md#api .)

Дивіться тут, щоб отримати докладнішу інформацію про включення налагодження через USB, а тут - огляд того, як це працює.


2

У цьому вирішенні ви отримаєте текстовий файл з індивідуальними URL-адресами для всіх вкладок, які ви відкрили в Chrome для Android.

  1. Як уже згадувалося в цьому відповіді по Майкл , ви повинні захопити файл, який містить поточні вкладки. Використовуючи root Explorer на пристрої, захопіть цей файл і перемістіть його до вибраної вами папки у Windows:/data/data/com.android.chrome/app_tabs/0/tab_state

  2. Встановіть інструменти GNU для Windows

  3. Іноді у файлі є дивний стрілочний символ, який накручує сценарій. Якщо ви запустите скрипт і він обрізає частину файлу, подивіться на останнього символу, і, ймовірно, це буде той дивний символ стрілки. Знайдіть / замініть його у вихідному файлі. Як тільки його не буде, сценарій буде працювати нормально. Це виглядає приблизно так:-->

  4. Перейдіть до командного рядка (перейдіть до "Виконати" або Win+ Rта введіть cmd) та перейдіть до папки, яка містить sed.exe(де б ви не встановили її на кроці 2.)

  5. Ви, ймовірно, захочете перемістити оригінальний файл ( tab_state) у ту саму папку, що містить sed.exe. Це все полегшить. Щойно ви зробите це, запустіть цей сценарій:

    sed -i "s/.\{6\}http/\r\n\r\nhttp/g" tab_state
    
  6. Це дозволить змінити файл із усіма правильно відформатованими URL-адресами. Відкрийте файл у вигляді текстового файлу, а потім скопіюйте та вставте вміст у документ Word чи якесь інше місце. З якоїсь причини, якщо ви не копіюєте та не вставляєте дані, при збереженні файлу вони стирають усі розриви рядків / повернення каретки. Якщо справи накручуються, просто почніть з початку і робіть це заново. Коли все буде сказано і зроблено, у вас повинен бути файл, який містить список посилань на всі вкладки, які ви відкривали раніше.


2

Ви можете замінити код на консолі від Луї Маддокса цим, який працює на сьогодні 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 відкритих вкладок на своєму мобільному пристрої) з оплатою 50 вкладок:

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

Майкл визначив файл tab_state, залишається його розшифрувати. Наступний скрипт працював для мене (в kitkat KSH_VERSION = '@ (#) MIRBSD KSH R43 2013/02/19' або xenial BASH_VERSION = '4.3.46 (1) -випуск "у файлі tab_state з Chrome 49.0.2623.105), спочатку виводиться остання URL-адреса, між URL-адресами видаляється будь-який недрукований байт та всі наступні байти, і більше, якщо потрібно, принаймні 2 байти видаляються. Після кожної URL-адреси він надрукує пробіл, потім видалені суміжні байти для друку, якщо такі є, то кома, а потім кількість інших видалених байтів (& зазначених байтів у дужках). Для друку 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

Ви можете використовувати цей подвиг брудної корівки на вразливих пристроях, щоб перетворитись на 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.100. У мене немає vboxкласу, який використовується у кожному скрипті, тому мені вдалося написати код, який працює зараз:

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

Я вважав , що публікація та скріншоти Луї Маддокса дуже корисні для розшифровки його сценарію, тож ось моє з оновленим деревом.

скріншот


У будь-якому випадку запропоновані рішення для подолання ліміту 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 і замініть оригінальний на оновлену версію.

Тепер сценарій покаже до 300 символів для URL-адрес.


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

У Windows я б встановив https://scoop.sh/ тодіscoop install busybox 7zip


-1

Це не відповідь, яку ви шукаєте, але:

  1. Створіть фіктивний рахунок в Google

  2. Увійдіть на пристрої Android та ввімкніть синхронізацію

  3. Увійдіть на робочий стіл і ввімкніть синхронізацію

  4. Встановіть розширення Session Buddy на робочий стіл

  5. Експорт вкладок


5
Як заявив ОП у своєму запитанні: функція синхронізації Chrome не збирає всі вкладки, відкриті на моєму телефоні Android. - як це має допомогти? Пропоноване рішення експортується після неповної синхронізації , тому воно не експортує всі вкладки, як цього вимагає ОП.
Іззі
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.