首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何允许用户复制我的电子邮件地址而不是爬虫?

如何允许用户复制我的电子邮件地址而不是爬虫?
EN

Stack Overflow用户
提问于 2020-09-15 03:07:30
回答 2查看 108关注 0票数 2

我有一个问题,一些爬虫爬虫从我的网站上的电子邮件地址,并发送垃圾邮件。

是否有一种方法允许普通用户复制电子邮件,但不允许爬虫(在html源代码中无法检测到xxx@xxx.com格式)?

我尝试了以下解决方案,但在复制电子邮件地址时,没有一种解决方案有效:

解决方案1

尝试复制--这将不会复制@.com

代码语言:javascript
复制
.name::after {
  content: '@';
}

.mail::after {
  content: '.com';
}
代码语言:javascript
复制
<span class="name">foo</span><span class="mail">gmail</span>

解决方案2

尝试复制,这使foo@gmail.com反转。

代码语言:javascript
复制
.mail {
  display: inline-flex;
  flex-direction: row-reverse;
}
代码语言:javascript
复制
<div class="mail">
  <span>@gmail.com</span>
  <span>foo</span>
</div>

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2020-09-15 03:26:23

您可以尝试在电子邮件之间添加HTML注释。

代码语言:javascript
复制
<div class="mail">
  <span>foo<!--not an email-->@gmail.com</span>
</div>

但是,正如OP所提到的,爬虫可以很容易地过滤HMTL注释。如果您也通过扫雷器运行原始代码,则注释可以被过滤掉。

您也可以尝试将您的电子邮件注入DOM与Javascript。

代码语言:javascript
复制
<div id="mail"></div>
<script>
  document.querySelector("#mail").innerText = ["foo", "gmail.com"].join("@")
</script>

这使得不运行Javascript的爬虫不可能看到您的电子邮件。但是,为了使它对您的用户更有用,您还可以实现复制-点击

代码语言:javascript
复制
<input type="text" readonly id="mail">
<script>
  let email = ["foo", "gmail.com"].join("@")
  let element = document.querySelector("#mail")
  element.value = email
  element.addEventListener('click', e => {
    element.select()
    element.setSelectionRange(0, 99999)
    document.execCommand("copy")
  })
</script>
<style>
   #mail{
     appearance: none; 
     border: 0; 
     outline: 0;
     font-family: inherit;
     font-size: inherit;
   }
</style>

输入可以被设计成正常的内联块文本.您可以添加一次复制后出现的临时工具提示。

票数 3
EN

Stack Overflow用户

发布于 2020-09-15 03:28:17

您可以强制用户单击按钮让JavaScript为他们复制电子邮件。

代码语言:javascript
复制
document.querySelector('button').onclick = () => {

  const span = document.querySelector('span');
  const before = window.getComputedStyle(span, ':before').getPropertyValue('content').replace(/"/g, '');
  const after = window.getComputedStyle(span, ':after').getPropertyValue('content').replace(/"/g, '');

  const input = document.createElement('input');
  document.body.append(input);
  input.value = before + after;
  input.select();
  input.setSelectionRange(0, 99999);
  document.execCommand('copy');
  input.remove();
}
代码语言:javascript
复制
span:before {
  content: 'foo';
}

span:after {
  content: '@bar.com';
}
代码语言:javascript
复制
<span></span><button>Copy!</button>

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/63894485

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档