Chrome की सिंक सुविधा मेरे Android फ़ोन पर खुले सभी टैब को नहीं उठा रही है।
क्या टैब एक फ़ाइल में संग्रहीत हैं जो मैं एक्सेस कर सकता हूं?
मेरा इरादा टैब की सूची को निर्यात करना है ताकि मैं डिवाइस पर फ़ैक्टरी रीसेट चला सकूं।
Android 4.3 चला रहा है
Chrome की सिंक सुविधा मेरे Android फ़ोन पर खुले सभी टैब को नहीं उठा रही है।
क्या टैब एक फ़ाइल में संग्रहीत हैं जो मैं एक्सेस कर सकता हूं?
मेरा इरादा टैब की सूची को निर्यात करना है ताकि मैं डिवाइस पर फ़ैक्टरी रीसेट चला सकूं।
Android 4.3 चला रहा है
जवाबों:
Chrome को डिवाइस से कनेक्ट करने और टैब तक पहुंचने के लिए आप Chrome डीबगर में रिमोट डिवाइस सुविधा का उपयोग कर सकते हैं। पूरी सूची प्राप्त करने के लिए दिखाई देने वाली टैब की सूची का विस्तार करें और फिर क्लिपबोर्ड पर दिखाई गई सभी चीजों को हाइलाइट करें और कॉपी करें : https://developers.google.com/web/tools/chrome-devtools/remote-debugging/
मैं सिर्फ इस तरह ~ 400 टैब निर्यात करने में कामयाब रहा।
ऊपर जेरेमी के उत्तर के लिए कुछ प्रशंसा दिखाने के लिए बस इस StackExchange में शामिल हो गए , और जेएस की कुछ पंक्तियों को भी जोड़ दिया मैंने टैब सूची को निर्यात करने के लिए उपयोग किया (क्योंकि कर्सर के साथ नकल करना आदर्श नहीं है!)
जैसा कि जेरेमी ने कहा, क्रोम डेत्टल्स आइकन (पैनल के ऊपर दाईं ओर) के Remote devices
तहत चुनें :More tools
⋮
Settings
⇒ Developer options
, रूट की आवश्यकता नहीं है)
Developer options
मेनू को सक्षम करना होगा , यह उपयोगकर्ताओं की सुरक्षा के लिए डिफ़ॉल्ट रूप से छिपा हुआ हैSettings
⇒ के तहत बिल्ड नंबर पर कई बार टैप करने की आवश्यकता हैAbout Device
अब डिवाइस जुड़ा हुआ है,
Remote devices
जावास्क्रिप्ट का उपयोग कर टैब की सूची को पुनः प्राप्त करने में सक्षम होने के लिए
चुना गया है, उस भक्तिमूलक दृश्य पर एक 2 देवटूल दृश्य खोलेंCtrl
+ Shift
+ J
(विन्डोज़) बस बंद हो जाएगा पहला डेवूलस पैनल।/deep/
प्रवेश करने के लिए NB CSS चयनकर्ता है#shadow-root
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
किसी 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
फ़ाइल में निर्यात करने में सक्षम होना चाहिए जिसे आप एमएस एक्सेल में खोल सकते हैं ।यह मेरे मानने वाले किसी व्यक्ति के लिए सहायक हो सकता है।
यदि आपके पास एंड्रॉइड कमांड लाइन उपकरण एक विकास मशीन पर स्थापित है, और अपने एंड्रॉइड डिवाइस पर यूएसबी डिबगिंग को सक्षम किया है, तो आप निम्नलिखित कार्य कर सकते हैं:
adb forward tcp:9222 localabstract:chrome_devtools_remote
अपने विकास मशीन पर निष्पादित करें।
Chrome इंस्टेंसेस एक डिबगिंग प्रोटोकॉल के लिए एक यूनिक्स डोमेन सॉकेट के माध्यम से अमूर्त पते के साथ पहुंच को उजागर करता है " chrome_devtools_remote
" - उपरोक्त एडीबी कमांड उस सॉकेट पर 9222 पोर्ट के लिए अनुरोध करता है। (आप एंड्रॉइड डिवाइस पर सभी यूनिक्स डोमेन सॉकेट की एक सूची टाइप करके प्राप्त कर सकते हैं adb shell cat /proc/net/unix
।)
डीबगिंग प्रोटोकॉल HTTP पर क्रोम उदाहरण के बारे में JSON डेटा को उजागर करता है। खुले टैब को सूचीबद्ध करने वाली JSON फाइल को निष्पादित करके प्राप्त किया जा सकता है wget -O tabs.json http://localhost:9222/json/list
।
(एपीआई के अन्य समापन बिंदु https://github.com/buggerjs/bugger-daemon/blob/master/README.md#api पर देखे जा सकते हैं ।)
USB डीबगिंग को सक्षम करने के बारे में अधिक जानकारी के लिए यहां देखें , और यहां बताया गया है कि यह कैसे काम करता है।
यह समाधान आपको उन सभी टैब के लिए अलग-अलग URL के साथ एक टेक्स्ट फ़ाइल प्रदान करेगा जो आपके पास Android के लिए Chrome में खुली हैं।
जैसा कि माइकल द्वारा इस उत्तर में उल्लेख किया गया है , आपको उस फ़ाइल को हथियाना होगा जिसमें वर्तमान टैब हैं। डिवाइस पर रूट एक्सप्लोरर का उपयोग करते हुए, इस फ़ाइल को पकड़ो और इसे विंडोज़ में अपनी पसंद के फ़ोल्डर में ले जाएँ:/data/data/com.android.chrome/app_tabs/0/tab_state
विंडोज के लिए जीएनयू उपकरण स्थापित करें
कभी-कभी फ़ाइल में एक अजीब तीर-चरित्र होता है जो स्क्रिप्ट को स्क्रू करता है। यदि आप स्क्रिप्ट चलाते हैं और यह फ़ाइल के भाग को काट देता है, तो अंतिम वर्ण को देखें और यह संभवतः उस अजीब तीर वर्ण का होगा। इसे मूल फ़ाइल में ढूंढें / बदलें। एक बार यह चला गया, तो स्क्रिप्ट ठीक चलेगी। यह इस तरह दिख रहा है:-->
कमांड लाइन प्रॉम्प्ट पर जाएं ("रन" या Win+ पर जाएं R, और टाइप करें cmd
) और उस फ़ोल्डर में नेविगेट करें जिसमें शामिल हैं sed.exe
(जहां आपने इसे चरण 2 में स्थापित किया है))
आप संभवतः tab_state
उसी फ़ोल्डर वाले मूल फ़ाइल ( ) को स्थानांतरित करना चाहेंगे sed.exe
। यह सब कुछ आसान कर देगा। एक बार जब आप ऐसा कर लेते हैं, तो इस स्क्रिप्ट को चलाएं:
sed -i "s/.\{6\}http/\r\n\r\nhttp/g" tab_state
यह फ़ाइल को सही ढंग से स्वरूपित सभी URL के साथ संशोधित करेगा। फ़ाइल को टेक्स्ट फ़ाइल के रूप में खोलें और फिर सामग्री को किसी Word दस्तावेज़ या किसी अन्य स्थान पर कॉपी और पेस्ट करें। किसी कारण से, यदि आप डेटा को कॉपी और पेस्ट नहीं करते हैं, तो जब आप फ़ाइल को सहेजते हैं तो यह सभी लाइन ब्रेक / गाड़ी के रिटर्न को मिटा देता है। यदि चीजें खराब हो जाती हैं, तो बस शुरू करें और इसे फिर से करें। जब यह सब कहा और किया जाता है, तो आपके पास एक फ़ाइल होनी चाहिए जिसमें आपके द्वारा पहले खोले गए सभी टैब के लिंक की एक सूची हो।
आप लुई मैडॉक्स से कंसोल में कोड को इस एक के साथ बदल सकते हैं , यह आज के रूप में काम कर रहा है 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
-पार्ट के साथ बदलें
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
सक्रिय उपयोग करें। यही कारण है कि मैंने इसे मैन्युअल रूप से किया है, हर किसी को जीवन को आसान बनाने के लिए इस कोड में परिवर्तन का प्रस्ताव करने के लिए स्वतंत्र महसूस करें।
माइकल ने tab_state फ़ाइल की पहचान की, यह इसे डिकोड करने के लिए बनी हुई है। निम्न स्क्रिप्ट ने मेरे लिए काम किया (किटकैट में KSH_VERSION = '@ (#) MIRBSD KSH R43 2013/02/19' या xenial BASH_VERSION = '4.3.46 (1)-क्रोम 49.0.2623.105 से टैब फ़ाइल पर -release), यह अंतिम URL को पहले प्रिंट करता है, URL के बीच में यह किसी भी तरह के अप्राप्य बाइट और निम्नलिखित सभी बाइट्स को हटा देता है, और यदि आवश्यक हो तो कम से कम 2 बाइट्स हटा दिए जाते हैं। प्रत्येक URL के बाद यह एक स्पेस प्रिंट करता है, फिर हटाए गए सन्निहित प्रिंट योग्य बाइट्स यदि कोई है, तो एक अल्पविराम, फिर हटाए गए अन्य बाइट्स की संख्या (और कोष्ठक के भीतर बाइट्स)। URL प्रिंट करने के लिए केवल टिप्पणी की गई इको कमांड का उपयोग करें।
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
पढ़ने के लिए आपको मूल या क्रोम होना चाहिए /data/data/com.android.chrome/app_tabs/0/tab_state0
क्रोम बनने के लिए और संलग्न डिवाइस से प्राप्त करने के लिए आप कमजोर उपकरणों पर इस गंदे जकड़न का उपयोग कर सकते हैं 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
सिमोंसन द्वारा सबसे हालिया उत्तर मेरे वर्तमान क्रोम बिल्ड पर काम नहीं कर रहा है 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 char cap को दूर करने के लिए प्रस्तावित समाधानों ने मेरे लिए काम नहीं किया इसलिए मैंने 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.pak
में \documents\
परिवर्तन के साथ अद्यतन किया गया है।resource.pak
क्योंकि आप कभी नहीं जानते हैं, क्रोम को बंद करें और अद्यतन संस्करण के साथ मूल को बदलें।अब स्क्रिप्ट उरोजों के लिए 300 वर्णों को दिखाएगी।
विंडोज़ में, tab_state0
टाइटेनियमबाकअप संग्रह से निकालने के लिए (जो रूट किए गए फोन पर काम करता है)
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
खिड़कियों पर मैं तब https://scoop.sh/ इंस्टॉल करताscoop install busybox 7zip
यह वह उत्तर नहीं है जो आप ढूंढ रहे हैं, लेकिन:
Google पर डमी खाता बनाएं
एंड्रॉइड डिवाइस पर लॉगिन करें और सिंकिंग सक्षम करें
डेस्कटॉप पर लॉगिन करें और सिंकिंग सक्षम करें
डेस्कटॉप पर सत्र बडी एक्सटेंशन स्थापित करें
निर्यात टैब