出现了一个场景,需要从网页中提取电子邮件地址。这将是一项重复性任务,加载类似的页面结构,但从每个页面提取不同的电子邮件地址。最终目标是将这些电子邮件地址复制并粘贴到电子表格中。创建运行 JavaScript 的书签是提取电子邮件的最简单方法。让我们来学习一下吧!
在我的特定示例中,我们想要提取的电子邮件位于具有特定 ID 的表内。同样,我们的目标是提取这些电子邮件,将它们复制到剪贴板,然后手动将它们粘贴到电子表格中。
我们首先创建一个立即调用函数表达式 (IIFE)。这将使所有变量的范围清晰地限定在函数本身范围内。因为我们后面要在代码中使用await,所以我们也将函数定义为async。
(async () => { })();
我们应该检查的第一件事是我们是否确实在该代码将起作用的网页上。如果不是,我们应该显示警报并抛出错误以停止其余代码的运行。
if (!window.location.href.startsWith('URL_HERE')) { const hrefError = 'This bookmark cannot be used on this webpage.'; alert(hrefError); throw hrefError; }
让我们通过其唯一 ID 找到该表。
const table = document.getElementById('ID_HERE');
如果找不到表,我们应该显示警报并抛出错误以停止其余代码的运行。
if (!table) { const tableError = 'Table not found'; alert(tableError); throw tableError); }
现在让我们查找表中的所有链接。
const links = table.getElementsByTagName('a');
我们还创建一个名为 emails 的变量,它将是一个空数组,以便我们可以存储找到的所有电子邮件。
const emails = [];
我们需要循环遍历表中找到的所有链接,看看 href 属性是否以 mailto 开头。如果是,那么我们就找到了一封电子邮件!我们将删除 mailto: 前缀并留下可以添加到 emails 数组中的电子邮件。
for (const link of links) { const href = link.getAttribute('href'); if (href && href.startsWith('mailto:')) { emails.push(href.substring(7)); } }
现在我们有了一个电子邮件数组,让我们将它们作为字符串复制到剪贴板,每封电子邮件之间有一个换行符。这可以更好地格式化数据,为将数据粘贴到电子表格中做好准备。我们使用await,因为剪贴板API是一个异步函数。
await navigator.clipboard.writeText(emails.join('\n'));
剩下要做的就是显示有多少电子邮件被复制到剪贴板。
alert(`${emails.length} emails copied to clipboard`);
这是最终代码:
(async () => { if (!window.location.href.startsWith('URL_HERE')) { const hrefError = 'This bookmark cannot be used on this webpage.'; alert(hrefError); throw hrefError; } const table = document.getElementById('ID_HERE'); if (!table) { const tableError = 'Table not found'; alert(tableError); throw tableError; } const links = table.getElementsByTagName('a'); const emails = []; for (const link of links) { const href = link.getAttribute('href'); if (href && href.startsWith('mailto:')) { emails.push(href.substring(7)); } } await navigator.clipboard.writeText(emails.join('\n')); alert(`${emails.length} emails copied to clipboard`); })();
当我第一次开始研究这个问题时,我尝试使用 Google Chrome Snippet。当我要复制到剪贴板时,它不起作用。原因是因为用户必须在允许使用剪贴板之前执行操作,例如单击按钮。
我在页面中注入了一个按钮,单击该按钮将运行该功能以获取电子邮件并将其复制到剪贴板。然而,这意味着用户必须打开浏览器的开发人员工具,运行代码片段,然后单击按钮。步骤太多,特别是对于那些可能不懂技术或对使用开发人员工具之类的东西感到困惑的人。
我还可以创建一个 Google Chrome 扩展程序,但这当然不是我想添加到商店的东西!这是针对一个非常具体的用例。我必须开发扩展,将其打包,并向用户解释如何手动加载未打包的扩展!再说一次,对于不懂技术的人来说这并不容易。
书签更容易!您可以在书签网址中运行 javascript!
在 Google Chrome 的菜单中,导航至“书签和列表”>书签管理器。在书签管理器菜单下,选择添加新书签。
在“名称”字段中,为书签指定一个名称,例如“提取电子邮件”。在 URL 字段中,首先输入 javascript:(是的,在 javascript 一词后添加冒号),然后粘贴代码以从上面提取电子邮件。保存书签。
如果您看不到书签栏,请转到 Google Chrome 的菜单并选择“书签和列表”>“书签”。显示书签栏。您刚刚创建的书签应该是可见的。
访问网址,单击书签,您应该会收到一条提醒,显示复制到剪贴板的电子邮件数量!
访问我们的网站 https://nightwolf.dev 并在 Twitter 上关注我们!
以上是使用 Javascript 书签简化电子邮件提取的详细内容。更多信息请关注PHP中文网其他相关文章!