3

搜索机器人或垃圾邮件机器人是否能够在读出页面时模拟/触发 JavaScript 事件?

4

2 回答 2

1

不,因为搜索机器人会获取静态 HTML 流。它们没有运行JavaScript 代码中的任何初始化事件,例如init()or 。myObj.init()它们不加载任何像 jQuery 这样的外部库,也不执行$(document).ready代码或任何标准.click()侦听器。因此,除非搜索机器人作者有特定理由故意构建他们的搜索机器人来触发或执行<script>页面上的块,否则他们通常不会运行 JavaScript 代码。

我写了一个搜索机器人。我只关心从页面中提取链接和文本。但是,我不想运行其他人的客户端日历组件或视频播放器组件。我不希望将 JS 代码插入到我的数据库中,它可能最终出现在搜索引擎结果页面 ( SERP ) 上。所以没有理由对块eval()中的任何代码运行命令,也没有理由<script>触发 JS 层中的任何初始化事件。

当搜索机器人加载 HTML DOM 时,通常会在其中嵌入外部 .js 文件。因此,执行 JS 需要解析多个 .js 文件的字符串,然后为这些文件构建连接器,然后尝试执行已下载的所有内容。对于搜索机器人作者来说,这是额外的工作,根本没有任何净收益。我们根本不希望 JS 代码出现在我们的 SERP 中的任何位置。否则,在 SERP 上看到 JS 代码看起来像是一个糟糕的搜索结果。但是,机器人可以看到<script>标签中的内容,并且只是在寻找要抓取的链接。所以这可能就是人们开始认为机器人可以执行 JavaScript 的原因,但他们只是真正解析它们以获取文本链接。

于 2016-04-30T18:13:10.403 回答
0

有人提出谷歌在抓取页面时在无头 WebKit 中加载页面以获得索引 AJAX 内容的机会以及其他原因不过,搜索机器人通常不会提交表单。

我查看了您的站点,保护完全是客户端的。由于 HTML 表单实际上只是对要提交到某个 URL 的键/值的描述,因此没有理由任何人不能只用机器人发布这些数据。

例子:

POST /contact
/* ... */

fullname=SO+test&email=test%40example.com&reason=test&message=test

此外,这很重要,您正在以这种方式惩罚合法访问者。JavaScript 可能被阻止、无法加载或根本无法工作的原因有很多。

于 2012-03-30T05:37:58.790 回答