Laz*_*zer 49 google-chrome google-search
我使用“编辑搜索引擎”在 Google Chrome 中创建了一些搜索条目。
我如何与我的同事分享其中的一些条目?
Pet*_*ček 28
编辑 2020-07-27:
此解决方案的导出部分在 Chrome 84 中不再起作用(settings脚本中使用的对象不再可用)。如果没有导出部分,导入脚本不是很有用,但它仍然可以用于导入具有设置的现有 JSON 文件或将搜索引擎设置从旧版本的 Chrome/Chromium 传输到当前版本。
这是一个无需使用任何外部工具或编辑注册表即可导出和导入 Chrome 搜索引擎设置的简单解决方案:
chrome://settings/searchEngines)。要下载带有搜索引擎设置的 JSON 文件:
(function exportSEs() {
/* Auxiliary function to download a file with the exported data */
function downloadData(filename, data) {
const file = new File([data], { type: 'text/json' });
const elem = document.createElement('a');
elem.href = URL.createObjectURL(file);
elem.download = filename;
elem.click();
}
/* Actual search engine export magic */
settings.SearchEnginesBrowserProxyImpl.prototype.getSearchEnginesList()
.then((searchEngines) => {
downloadData('search_engines.json', JSON.stringify(searchEngines.others));
});
}());
Run Code Online (Sandbox Code Playgroud)
要从使用上述脚本创建的 JSON 文件导入设置:
(async function importSEs() {
/* Auxiliary function to open a file selection dialog */
function selectFileToRead() {
return new Promise((resolve) => {
const input = document.createElement('input');
input.setAttribute('type', 'file');
input.addEventListener('change', (e) => {
resolve(e.target.files[0]);
}, false);
input.click();
});
}
/* Auxiliary function to read data from a file */
function readFile(file) {
return new Promise((resolve) => {
const reader = new FileReader();
reader.addEventListener('load', (e) => {
resolve(e.target.result);
});
reader.readAsText(file);
});
}
const file = await selectFileToRead();
const content = await readFile(file);
const searchEngines = JSON.parse(content);
searchEngines.forEach(({ name, keyword, url }) => {
/* Actual search engine import magic */
chrome.send('searchEngineEditStarted', [-1]);
chrome.send('searchEngineEditCompleted', [name, keyword, url]);
});
}());
Run Code Online (Sandbox Code Playgroud)
笔记
chrome://URL 上执行(去过那里,做过)。Wil*_*rin 11
这是在 Linux 上将 chrome 搜索引擎导出为 CSV 的单个命令:
sqlite3 -csv ~/.config/chromium/Default/Web\ Data 'select short_name,keyword,url from keywords' > ~/search-engines.csv
Run Code Online (Sandbox Code Playgroud)
您需要安装 sqlite3。~/.config/chrome如果您使用的是 Windows,请替换为相应的 Windows 路径。应该是这样的%AppData%\Local\Google\Chrome\User Data
您可以导出为 sqlite 插入语句,而不是导出为 CSV:
(printf 'begin transaction;\n'; sqlite3 ~/.config/chromium/Default/Web\ Data 'select short_name,keyword,url,favicon_url from keywords' | awk -F\| '{ printf "insert into keywords (short_name, keyword, url, favicon_url) values ('"'"%s"'"', '"'"%s"'"', '"'"%s"'"', '"'"%s"'"');\n", $1, $2, $3, $4 }'; printf 'end transaction;\n') > ~/search-engine-export.sql
Run Code Online (Sandbox Code Playgroud)
然后复制~/search-engine-export.sql到另一台机器上,用这个命令导入:
sqlite3 ~/.config/chromium/Default/Web\ Data < search-engine-export.sql
Run Code Online (Sandbox Code Playgroud)
确保Web Data如上所述用机器上的路径替换路径。
这是可能的,但这已经足够你不想痛苦了。
在您的 Chrome 配置文件中找到网络数据文件。在 Windows 7 中,它将在这里:
"%USERPROFILE%\AppData\Local\Google\Chrome\User Data\Default\Web Data"
在 Ubuntu 中使用SQLite Studio或 sqlite等 SQLite 程序打开文件(sudo apt-get install sqlite)并在 SQLite Studio 中导出关键字表或在 Linux 中运行以下命令:
sqlite3 "Web Data" ".dump keywords" > keywords.sql

让您的同事导入关键字,执行与此过程相反的操作。
就像我说的,可能,但很痛苦。
我编写了一个 Javascript 解析器,将 SQL 从 Web 数据转换为几乎通用的HTML格式的 Netscape 书签文件格式(具有讽刺意味的是,该格式的最终标准似乎是 Microsoft),如果您有兴趣将关键字导入其他浏览器,如 Firefox或歌剧。
如果您对替代解决方案感兴趣,我创建了Shortmarks以允许您在任何浏览器中使用相同的自定义搜索引擎集,并且我计划很快实现与他人共享的功能。几天后即将发布的版本将在我完成对新功能的测试后立即包含我上面提到的导入代码。
...捎带https://superuser.com/a/1458616/55621但尝试更新它以与当前版本的 Chrome 一起使用。这在 Mac 上大约适用于 Chrome 88。
要下载带有搜索引擎设置的 JSON 文件:
(function exportSEs() {
/* Auxiliary function to download a file with the exported data */
function downloadData(filename, data) {
const file = new File([data], { type: 'text/json' });
const elem = document.createElement('a');
elem.href = URL.createObjectURL(file);
elem.download = filename;
elem.click();
}
let searchEngines = [];
document.querySelector('settings-ui').shadowRoot
.querySelector('settings-main').shadowRoot
.querySelector('settings-basic-page').shadowRoot
.querySelector('settings-search-page').shadowRoot
.querySelector('settings-search-engines-page').shadowRoot
.querySelector('settings-search-engines-list#otherEngines').shadowRoot
.querySelectorAll('settings-search-engine-entry')
.forEach($el => searchEngines.push(
{
name: $el.shadowRoot.querySelector('#name-column').textContent,
keyword: $el.shadowRoot.querySelector('#keyword-column').textContent,
url: $el.shadowRoot.querySelector('#url-column').textContent
})
)
downloadData('search_engines.json', JSON.stringify(searchEngines));
}());
Run Code Online (Sandbox Code Playgroud)
要从使用上述脚本创建的 JSON 文件导入设置:
(async function importSEs() {
/* Auxiliary function to open a file selection dialog */
function selectFileToRead() {
return new Promise((resolve) => {
const input = document.createElement('input');
input.setAttribute('type', 'file');
input.addEventListener('change', (e) => {
resolve(e.target.files[0]);
}, false);
input.click();
});
}
/* Auxiliary function to read data from a file */
function readFile(file) {
return new Promise((resolve) => {
const reader = new FileReader();
reader.addEventListener('load', (e) => {
resolve(e.target.result);
});
reader.readAsText(file);
});
}
const file = await selectFileToRead();
const content = await readFile(file);
const searchEngines = JSON.parse(content);
searchEngines.forEach(({ name, keyword, url }) => {
/* Actual search engine import magic */
chrome.send('searchEngineEditStarted', [-1]);
chrome.send('searchEngineEditCompleted', [name, keyword, url]);
});
}());
Run Code Online (Sandbox Code Playgroud)
这很可能会因 Chrome 的后续版本而中断,并且可能有更好的方法来遍历 dom。
使用 Google Takeout https://takeout.google.com将 Chrome 搜索引擎导出到 json 文件。
选择Chrome,然后选择All Chrome data included、 或SearchEngines。
导出将包含一个SearchEngines.json文件。
基于https://superuser.com/a/1626575/44976
这仅涵盖导出(因为对于我的用例,我希望将搜索引擎从 Chrome 导出到 Firefox)
对于 Chrome,112.0.5615.49以下代码片段适用于 macOS。导航到 chrome://settings/searchEngines 后在 DevTools 控制台中执行
Search Engines(function exportSEs() {
/* Auxiliary function to download a file with the exported data */
function downloadData(filename, data) {
const file = new File([data], { type: 'text/json' });
const elem = document.createElement('a');
elem.href = URL.createObjectURL(file);
elem.download = filename;
elem.click();
}
let searchEngines = [];
document.querySelector('settings-ui').shadowRoot
.querySelector('settings-main').shadowRoot
.querySelector('settings-basic-page').shadowRoot
.querySelector('settings-search-page').shadowRoot
.querySelector('settings-search-engines-page').shadowRoot
.querySelector('settings-search-engines-list').shadowRoot
.querySelectorAll('settings-search-engine-entry')
.forEach($el => searchEngines.push(
{
name: $el.shadowRoot.querySelector('#name-column').textContent,
keyword: $el.shadowRoot.querySelector('#shortcut-column').textContent,
url: $el.shadowRoot.querySelector('#url-column-padded').textContent
})
)
downloadData('search_engines.json', JSON.stringify(searchEngines));
}());
Run Code Online (Sandbox Code Playgroud)
Site Search下面的代码片段和上面的代码片段之间的唯一区别是迭代的目标 has #activeEngines(这会导致Site Search导出而不是导出Search Engines)
(function exportSEs() {
/* Auxiliary function to download a file with the exported data */
function downloadData(filename, data) {
const file = new File([data], { type: 'text/json' });
const elem = document.createElement('a');
elem.href = URL.createObjectURL(file);
elem.download = filename;
elem.click();
}
let searchEngines = [];
document.querySelector('settings-ui').shadowRoot
.querySelector('settings-main').shadowRoot
.querySelector('settings-basic-page').shadowRoot
.querySelector('settings-search-page').shadowRoot
.querySelector('settings-search-engines-page').shadowRoot
.querySelector('settings-search-engines-list#activeEngines').shadowRoot
.querySelectorAll('settings-search-engine-entry')
.forEach($el => searchEngines.push(
{
name: $el.shadowRoot.querySelector('#name-column').textContent,
keyword: $el.shadowRoot.querySelector('#shortcut-column').textContent,
url: $el.shadowRoot.querySelector('#url-column-padded').textContent
})
)
downloadData('search_engines.json', JSON.stringify(searchEngines));
}());
Run Code Online (Sandbox Code Playgroud)
Chrome 103.0 于 2022 年 6 月 7 日更新:
出口
使用这个答案中的方法来获取SearchEngines.json。
进口
我必须将此答案的导入代码修改为以下内容:
(async function importSEs() {
/* Auxiliary function to open a file selection dialog */
function selectFileToRead() {
return new Promise((resolve) => {
const input = document.createElement('input');
input.setAttribute('type', 'file');
input.addEventListener('change', (e) => {
resolve(e.target.files[0]);
}, false);
input.click();
});
}
/* Auxiliary function to read data from a file */
function readFile(file) {
return new Promise((resolve) => {
const reader = new FileReader();
reader.addEventListener('load', (e) => {
resolve(e.target.result);
});
reader.readAsText(file);
});
}
const file = await selectFileToRead();
const content = await readFile(file);
const searchEngines = JSON.parse(content);
searchEngines["Search Engines"].forEach(({ short_name, keyword, url }) => {
/* Actual search engine import magic */
chrome.send('searchEngineEditStarted', [-1]);
chrome.send('searchEngineEditCompleted', [short_name, keyword, url]);
});
}());
Run Code Online (Sandbox Code Playgroud)
在 Chrome 控制台中运行此命令chrome://settings/searchEngines。
| 归档时间: |
|
| 查看次数: |
13094 次 |
| 最近记录: |