4Manuals

  • PDF Cloud HOME

使用Node和Python哈希页面源时的区别 Download

    如何删除外部索引并合并内部json 如何从作为请求传递的输入类型数据绑定中提取数据 Mocha-无法实现TestFunction接口方法 在Perl中将哈希转换为哈希数组 如何使用ffmpeg创建带下划线的水印文本 如何将自定义错误从Lambda发送到Api网关 构建StaticInjectorError时出现Angular 7 如何设置偏执狂:sequelize中的所有查询都为false? 猫鼬-删除后不会更新“唯一” 如何从电子桌面应用程序向php网站发送和接收数据?

目标: 哈希页面源,以检测计划的抓取之间的更改。

Python代码:

import requests
import hashlib

url = 'http://example.org/'

r = requests.get(url, verify=False,)
r.encoding = 'utf-8'

print(hashlib.sha256(r.text.encode('utf-8')).hexdigest())

结果:ea8fac7c65fb589b0d53560f5251f74f9e9b243478dcb6b3ea79b5e36449c8d9

节点和伪造者代码:

const puppeteer = require('puppeteer');
var crypto = require('crypto');

(async()=> {
    const browser= await puppeteer.launch();
    const page= await browser.newPage();

    try {
        const response = await page.goto('http://example.org/', { waitUntil: 'domcontentloaded', timeout: 30000 });
        console.log(crypto.createHash('sha256').update(response.text().toString()).digest('hex'));
    } catch (e) {
        console.log(e.message);
    }
    await browser.close();
})();

结果:b4e6060006b920bc021110ea8ab8d67744983e2b7ff75e1c8be5613af93f687d

问题:

  1. 为什么有区别?据我检查,两种方法 返回相同的响应。

  2. 我可以得到相同的结果吗?

  3. 是否有更好的方法来检测页面内容的变化?

1 个答案:

答案 0 :(得分:1)

您需要等待puppeteer中的响应文本,否则您将对Promise { <pending> }的字符串化版本进行哈希处理

const puppeteer = require('puppeteer');
var crypto = require('crypto');

(async()=> {
    const browser= await puppeteer.launch();
    const page= await browser.newPage();

    try {
        const response = await page.goto('http://example.org/', { waitUntil: 'domcontentloaded', timeout: 30000 });
        const source = await response.text();
        console.log(crypto.createHash('sha256').update(source).digest('hex'));
    } catch (e) {
        console.log(e.message);
    }
    await browser.close();
})();

输出:

python c.py
ea8fac7c65fb589b0d53560f5251f74f9e9b243478dcb6b3ea79b5e36449c8d9
node c.js
ea8fac7c65fb589b0d53560f5251f74f9e9b243478dcb6b3ea79b5e36449c8d9



Similar searches
    Geoserver 2.17不显示从openmaptiles下载的某些图层 使用python和ffmpeg从字典列表中的两个值进行for循环 我不确定我的UICollectionView在做什么 Z3的“ ctx-solver-simplify”和“ ctx-simplify”之间的可满足性不一致 是什么阻止CSS样式出现?