Chrome의 동기화 기능이 Android 휴대 전화에서 열려있는 모든 탭을 선택하지 않습니다.
탭은 내가 액세스 할 수있는 파일에 저장되어 있습니까?
내 의도는 장치에서 공장 초기화를 실행할 수 있도록 탭 목록을 내보내는 것입니다.
안드로이드 4.3 실행
Chrome의 동기화 기능이 Android 휴대 전화에서 열려있는 모든 탭을 선택하지 않습니다.
탭은 내가 액세스 할 수있는 파일에 저장되어 있습니까?
내 의도는 장치에서 공장 초기화를 실행할 수 있도록 탭 목록을 내보내는 것입니다.
안드로이드 4.3 실행
답변:
Chrome 디버거의 원격 장치 기능을 사용하여 장치의 Chrome에 연결하고 탭에 액세스 할 수 있습니다. 보이는 탭 목록을 확장하여 전체 목록을 가져온 다음 표시된 URL (URL 포함)을 모두 클립 보드에 강조 표시하고 복사 하십시오 . https://developers.google.com/web/tools/chrome-devtools/remote-debugging/
방금이 방법으로 ~ 400 개의 탭을 내보낼 수있었습니다.
이 StackExchange에 가입하여 위에 Jeremy의 답변에 대한 감사를 표시 하고 탭 목록을 내보내는 데 사용한 몇 줄의 JS를 추가하십시오 (커서로 복사하는 것이 이상적이지 않기 때문에)
Jeremy가 말했듯이 Chrome devtools 아이콘 (패널의 오른쪽 상단) 에서 Remote devices아래 More tools를 선택하십시오 ⋮.
Settings⇒ 아래 Developer options, 루트 필요 없음)
Developer options메뉴 를 활성화해야합니다. 기본적으로 사용자를 보호하기 위해 숨겨져 있습니다.Settings⇒ 아래 빌드 번호를 여러 번 두 드려야했습니다.About Device이제 장치가 연결되었습니다.
Remote devicesJavaScript를 사용하여 탭 목록을 검색 할 수 있도록
선택한 devtools보기에서 두 번째 devtools보기를여십시오.Ctrl+ Shift+ J(WINDOWS)가 닫힙니다. 첫 번째 devtools 패널./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)
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}))지금 작동합니다
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대신 호스트 요소 의 속성 을 사용해야했습니다 . 이유는 확실하지 않지만 지원되지
브라우저가 다운 된 후 영구적으로 닫힌 탭을 복구하려고 할 때이 솔루션을 발견했습니다. 필요한 정보에 액세스하려면 장치가 루팅 되어 있어야 장치에 설치된 루트 파일에 액세스하여 파일 탐색기 앱을 실행할 수 있습니다. ES 파일 탐색기 또는 루트 탐색기 가 권장됩니다.
장치의 루트 폴더 (보호 된 시스템 파티션)로 이동하여 → 선택 DATA→을 선택 com.android.chrome합니다.
현재 탭에 대한 정보를 찾을 수있는 곳이 몇 군데 있습니다.
app_tabs다음 0. 이 폴더에는 tab_state모든 현재 탭의 목록이 포함 된 파일이 있어야 합니다.tab3, tab4현재 탭에 대한 정보를 포함하는 등,.다음으로 볼 곳은 /data/com.android.chrome/app_chrome/Default/입니다. 이 폴더에는이라는 파일이 History있습니다. 상황에 따라 최근 방문한 사이트 목록이 여기에 있습니다.
마지막으로로 이동합니다 Sync Data folder. 여기에는 Google과 동기화되는 정보가 있습니다 (현재 다른 기기에서 동기화 한 모든 탭이 포함되어야 함).
SyncData.sqlite3에서 모든 Google 검색 기록을 확인할 수도 있습니다 (때로는 재미있는 기사 라고 볼 수 있음)..CSV거나 .XLS파일 로 내보낼 수 있어야합니다 .이것은 내가 생각하는 사람에게 도움이 될 수 있습니다.
당신이있는 경우 안드로이드 명령 행 도구 개발 시스템에 설치를하고 안드로이드 장치에서 디버깅 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 에서 찾을 수 있습니다 .
이 해결 방법은 Android 용 Chrome에서 연 모든 탭에 대한 개별 URL이 포함 된 텍스트 파일을 제공합니다.
이에 언급 한 바와 같이 대답 하여 마이클 , 당신은 현재의 탭이 들어있는 파일을 잡아해야합니다. 장치에서 루트 탐색기를 사용하여이 파일을 잡고 Windows에서 선택한 폴더로 이동하십시오./data/data/com.android.chrome/app_tabs/0/tab_state
때로는 파일에 스크립트를 망치는 이상한 화살표 문자가 있습니다. 스크립트를 실행하고 파일의 일부를 자르면 마지막 문자를 보면 아마도 이상한 화살표 문자 일 것입니다. 원본 파일에서 찾거나 교체하십시오. 일단 사라지면 스크립트가 정상적으로 실행됩니다. 다음과 같이 보입니다 :-->
명령 행 프롬프트 ( "Run"또는 Win+로 이동하여을 R입력 cmd)로 이동 한 다음 sed.exe(2 단계에서 설치 한 위치) 폴더가있는 폴더로 이동하십시오 .
원본 파일 ( tab_state)을 포함하는 동일한 폴더 로 이동하고 싶을 것입니다 sed.exe. 모든 것이 쉬워집니다. 일단 완료하면 다음 스크립트를 실행하십시오.
sed -i "s/.\{6\}http/\r\n\r\nhttp/g" tab_state
이렇게하면 모든 URL이 올바르게 형식화 된 파일이 수정됩니다. 파일을 텍스트 파일로 연 다음 내용을 복사하여 Word 문서 나 다른 위치에 붙여 넣습니다. 어떤 이유로 데이터를 복사하여 붙여 넣지 않으면 파일을 저장하면 모든 줄 바꿈 / 캐리지 리턴이 지워집니다. 문제가 해결되면 다시 시작하십시오. 모두 말하고 완료하면 이전에 열었던 모든 탭에 대한 링크 목록이 포함 된 파일이 있어야합니다.
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활성 탭을 닫습니다. 그것이 내가 수동으로 한 방식입니다. 모든 사람의 삶을 편하게하기 위해이 코드에 대한 변경을 제안하십시오.
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
읽으려면 루트 또는 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
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다음 단계에 따라 소스에서 편집하기로 결정했습니다 .
C:\Program Files (x86)\Google\Chrome\Application\75.0.3770.100(여기서 75.0.3770.100빌드의 이름은)의 사본하게 resources.pak드래그 복사하여 문서에 폴더와에 드롭 unpack.bat압축을 푼 폴더에.\document\resources_unpaked\을 11208.js엽니 다.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.
pak_index.ini놓습니다 pak.bat. 이제 resource.pakin \documents\이 변경 사항으로 업데이트되었습니다.resource.pak알 수 없으므로 백업을 하고 Chrome을 닫고 원래 버전을 업데이트 된 버전으로 바꿉니다.이제 스크립트는 URL에 대해 최대 300자를 표시합니다.
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
이것은 당신이 찾고있는 대답이 아니지만 :
Google에서 더미 계정 만들기
Android 기기에서 로그인하고 동기화 사용
데스크탑에 로그인하고 동기화를 활성화하십시오
데스크탑에 Session Buddy 확장 설치
내보내기 탭