열린 Chrome 탭 목록을 내보내려면 어떻게해야합니까?


44

Chrome의 동기화 기능이 Android 휴대 전화에서 열려있는 모든 탭을 선택하지 않습니다.

탭은 내가 액세스 할 수있는 파일에 저장되어 있습니까?

내 의도는 장치에서 공장 초기화를 실행할 수 있도록 탭 목록을 내보내는 것입니다.

안드로이드 4.3 실행


그 목적을위한 부가 기능이 있었으면 좋겠다.
neverMind9

그렇게하려면 독립형 루트없는 방법이 있어야합니다. 부트 로더가 지워지기 때문입니다. 부트 로더 와이프 두통을 발명 한 사람은 즉시 해고해야합니다. 부트 로더는 함정입니다. 잠금을 해제하면 전체 데이터가 없어지고 일부는 처음에 잠금을 해제하지 않으면 백업 할 수 없습니다. 악순환. 그리고 암호화와 ARM TrustZone 두통도 있습니다.
neverMind9

답변:


35

Chrome 디버거의 원격 장치 기능을 사용하여 장치의 Chrome에 연결하고 탭에 액세스 할 수 있습니다. 보이는 탭 목록을 확장하여 전체 목록을 가져온 다음 표시된 URL (URL 포함)을 모두 클립 보드에 강조 표시하고 복사 하십시오 . https://developers.google.com/web/tools/chrome-devtools/remote-debugging/

방금이 방법으로 ~ 400 개의 탭을 내보낼 수있었습니다.


2
그들은 너무 긴 경우 크롬 디버거 목록이 너무 대신 복사 붙여 넣기, 당신은 URL을 직접의 방법을 사용하고 얻을 수 있습니다, URL을 단축 언급하고 싶었 루이 매덕스의 대답
woojoo666

@ woojoo666 : Chrome의 기능이 변경되어 이제 Louis의 답변이 많은 URL의 끝을 자릅니다. 100 자 이상의 URL (내 경우에는 열려있는 모든 탭의 약 50 %)에 결말이없는 것처럼 보입니다.
peterflynn

@ peterflynn은 여전히 ​​나를 위해 일합니다. 432 자 길이의 URL을 내보냈습니다. 확인하기 위해 개발 도구를 팝업 창에서 열고 "원격 장치"창으로 이동 한 다음 ctrl-shift-J를 사용하여 두 번째 개발 도구 창을 연 다음 제공된 스크립트를 사용하십시오. 여기 맞습니까?
woojoo666

이 작업을 수행하는 데 필요한 최소 Android 버전은 무엇입니까?
neverMind9

나는 그것을 할 수 있는 독립형 방법 이 있었으면 좋겠다 . 외부 방법에 의존하지 않고. 루트 탭 목록이 있지만 사람들이 오작동의 위험이 있다고 말하기 때문에 루팅되지 않았습니다.
neverMind9

24

이 StackExchange에 가입하여 위에 Jeremy의 답변에 대한 감사를 표시 하고 탭 목록을 내보내는 데 사용한 몇 줄의 JS를 추가하십시오 (커서로 복사하는 것이 이상적이지 않기 때문에)

Jeremy가 말했듯이 Chrome devtools 아이콘 (패널의 오른쪽 상단) 에서 Remote devices아래 More tools를 선택하십시오 .

  • 휴대 전화에서 USB 디버깅 설정 ( Settings⇒ 아래 Developer options, 루트 필요 없음)
    • Developer options메뉴 를 활성화해야합니다. 기본적으로 사용자를 보호하기 위해 숨겨져 있습니다.
    • 내 휴대 전화에서 Settings⇒ 아래 빌드 번호를 여러 번 두 드려야했습니다.About Device
  • 이 작업이 완료되면 USB를 연결하고 MTP 연결을 허용하십시오
  • Chrome devtools 원격 기기 패널이 열리면 휴대 전화에서 USB 디버깅 허용을 요청합니다.
    • 당신은 항상 컴퓨터를 신뢰하도록 선택할 수 있습니다

이제 장치가 연결되었습니다.

  • Remote devicesJavaScript를 사용하여 탭 목록을 검색 할 수 있도록 선택한 devtools보기에서 두 번째 devtools보기를여십시오.
    • 이 기능을 사용하려면 팝업 모드에서 devtools (패널 오른쪽 상단의 세로 줄임표 기호 사용)가 있어야합니다. 그렇지 않으면 Command + Option + J (MAC) Ctrl+ Shift+ J(WINDOWS)가 닫힙니다. 첫 번째 devtools 패널.
  • '더보기'를 클릭하여 처음 몇 개의 항목에서 모든 탭으로 목록을 확장하십시오.
  • 목록에 대해 스크립트를 작성하려면 다음 몇 줄의 코드를 사용하십시오 [두 번째 devtools 창의 콘솔에 입력]
    • NB /deep/#shadow-rootDOM 요소 를 입력하기위한 CSS 선택기입니다.

Android 용 Chrome에서 열린 모든 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)
...

최신 정보

어떤 이유로 나는 오류가있어 시간의 일부 는 가져 오지 못했습니다 말, href(A)의 속성 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
크롬 변경, 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을 내보냈습니다. diamotte에서 제공 한 스크립트를 사용하고 있는지 확인하십시오
woojoo666

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대신 호스트 요소 의 속성 을 사용해야했습니다 . 이유는 확실하지 않지만 지원되지
Adrian

1
다른 사람이 어려움을 겪을 경우를 대비하여 이러한 스크립트 중 일부를 실행하는 데 문제가 있습니다 (커널의 USB 스택을 중단하기 전에 10 분 이상 100 % 사용량으로 망치고있었습니다). 내가 찾은 가장 좋은 방법은 chrome dev 도구 검사기에서 부모 HTML 요소를 선택하는 것입니다 (중첩 된 dev 도구 창의 왼쪽 상단에있는 커서 버튼을 사용하여 목록에서 임의의 항목을 선택한 다음 부모 요소를 선택하십시오) 마우스 오른쪽 버튼으로 클릭-> "HTML로 편집"-> 다른 텍스트 파일로 복사하십시오. 그런 다음 위의 스크립트를 로컬 HTML 사본 (또는 BASH)에서 작동하도록보다 쉽고 빠르게 적용 할 수 있습니다.
JZL003

13

브라우저가 다운 된 후 영구적으로 닫힌 탭을 복구하려고 할 때이 솔루션을 발견했습니다. 필요한 정보에 액세스하려면 장치가 루팅 되어 있어야 장치에 설치된 루트 파일에 액세스하여 파일 탐색기 앱을 실행할 수 있습니다. ES 파일 탐색기 또는 루트 탐색기 가 권장됩니다.

  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 검색 기록을 확인할 수도 있습니다 (때로는 재미있는 기사 라고 볼 수 있음).
    • 이 파일을 읽으려면 PC에 Sqlite3 데이터 브라우저 프로그램 이 필요합니다. 응용 프로그램은 MS Excel 에서 열 수있는 유용성이 높 .CSV거나 .XLS파일 로 내보낼 수 있어야합니다 .

이것은 내가 생각하는 사람에게 도움이 될 수 있습니다.


5

당신이있는 경우 안드로이드 명령 행 도구 개발 시스템에 설치를하고 안드로이드 장치에서 디버깅 USB를 활성화 한 다음, 다음을 수행 할 수 있습니다 :

  • adb forward tcp:9222 localabstract:chrome_devtools_remote개발 머신에서 실행 하십시오.

    Chrome 인스턴스는 추상 주소가 " chrome_devtools_remote"인 유닉스 도메인 소켓을 통해 디버깅 프로토콜에 대한 액세스 권한을 제공합니다 . 위의 adb 명령은 해당 소켓의 포트 9222로 요청을 전달합니다. (를 입력하면 Android 장치에서 모든 유닉스 도메인 소켓 목록을 얻을 수 있습니다 adb shell cat /proc/net/unix.)

  • 디버깅 프로토콜은 HTTP를 통해 크롬 인스턴스에 대한 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

이 해결 방법은 Android 용 Chrome에서 연 모든 탭에 대한 개별 URL이 포함 된 텍스트 파일을 제공합니다.

  1. 이에 언급 한 바와 같이 대답 하여 마이클 , 당신은 현재의 탭이 들어있는 파일을 잡아해야합니다. 장치에서 루트 탐색기를 사용하여이 파일을 잡고 Windows에서 선택한 폴더로 이동하십시오./data/data/com.android.chrome/app_tabs/0/tab_state

  2. Windows 용 GNU 도구 설치

  3. 때로는 파일에 스크립트를 망치는 이상한 화살표 문자가 있습니다. 스크립트를 실행하고 파일의 일부를 자르면 마지막 문자를 보면 아마도 이상한 화살표 문자 일 것입니다. 원본 파일에서 찾거나 교체하십시오. 일단 사라지면 스크립트가 정상적으로 실행됩니다. 다음과 같이 보입니다 :-->

  4. 명령 행 프롬프트 ( "Run"또는 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

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');
})

그러나 장치에 열린 탭이 너무 많으면 시도하지 마십시오.

tabs50 개의 탭을 충전하여 열린 탭을 수동으로 동기화 하는 부분 (이 기능이 여전히 누락되어 있고 휴대 장치에서 열린 탭이 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)-릴리즈'에서 Chrome 49.0.2623.105의 tab_state 파일). 인쇄 할 수없는 바이트와 모든 후속 바이트를 제거하는 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

읽으려면 루트 또는 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_state0URL을 추출하십시오.

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

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.pakin \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

Windows에서는 https://scoop.sh/ 를 설치 한 다음scoop install busybox 7zip


-1

이것은 당신이 찾고있는 대답이 아니지만 :

  1. Google에서 더미 계정 만들기

  2. Android 기기에서 로그인하고 동기화 사용

  3. 데스크탑에 로그인하고 동기화를 활성화하십시오

  4. 데스크탑에 Session Buddy 확장 설치

  5. 내보내기 탭


5
OP가 그의 질문에서 언급했듯이 : Chrome의 동기화 기능이 내 Android 휴대 전화에서 열려있는 모든 탭을 선택하지 않습니다. – 어떻게 도움이 되나요? 불완전한 동기화 후에 제안 된 솔루션을 내보내므로 OP에서 요청한대로 모든 탭을 내보내지는 않습니다.
Izzy
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.