js 给id 赋值变量,js id选择器赋值

大家好,给大家分享一下js 给id 赋值变量,很多人还不知道这一点。下面详细解释一下。现在让我们来看看!

由于自己近年来一直在做Python爬虫开发,就把之前所做过的一些项目一些难点以及一些经验记录下来,对所抓取下来的企业数据进行一些数据上的补充,需要抓取企查猫的搜索接口,企查猫的搜索接口上有参数进行了js加密,找我研究一下,今天我把我的经历和解决方案分享给大家。

加密位置

在它的搜索接口这里mfccode参数是每次都会变的,而且失效很快,只能查找一次,第二次或者失效就会跳转登录页面,并且我们直接抓取的话,直接跳转的也是登录页面,所以就必须要研究该参数

a0d4338f14812721c39e642c2d0cd183.png
mfccode

进行分析

我们通过Fiddler抓包分析在它的页面请求成功之前额外进行了两次请求,并且第一次请求返回的是一串js代码,如下图:

896e6661caccea5d39a248d8ccc9c48c.png
两次请求

0033c409a462db6a9f3fa6c5f8948dbb.png
请求返回的js代码

可能改参数就是由该js生成的,我们通过观察js的调用栈追溯到该参数生成位置,如图:

396aa1ac2480705052e4eda76f35683f.png

2159ba275ec0386ac151835c7b9c9574.png
window.__qzmcf()

打上断点进行单步调试,出现的就是我们第一次访问返回的js代码快码论文。如图:

1cfadd2f7656def9be987308dabfe653.png

但是这串代码用Pretty print 是无法进行格式化的,没办法进行调试,所以我们需要把js复制下来自己写一个页面进行调试分析

首先观察js,可以看出这串js它是个立即执行函数,内部传入了一个window,如图:

eecdfe82fda752dedc6dead10f27e630.png
立即执行函数

js立即执行函数就是可以让你的函数在创建后立即执行,可以让你的函数在定义后立即被执行,这种模式本质上就是函数表达式(命名的或者匿名的),在创建后立即执行。也算是一个闭包,所以呢此处我们就需要进行一个拆包,先观察js

e0b52f3fd456c00db52efbcec81a2fad.png

w也就是window,调用了s这个函数,经过观察发现s函数传入的参数其实就是一个个的Unicode 编码通过String.fromCharCode()进行了转换,如图:

a7d689364f4aba784c67dc22cfeb7328.png
__qzmcf

是不是很熟悉,这不就是上图window.__qzmcf()调用的函数,意思就是将dc赋值给了window.__qzmcf(),那么就证明我们只需要调用dc就可以了,我们把dc函数扣出来,然后再把需要的js全扣出来,把需要w的位置改为window,进行console.log()输出就成功获取如图:

491d6bb57585abfbdce4f5763ea97f3c.png
mfccode

此处需要注意window.document,python是无法调用的,所以我们需要用去观察该js做了什么,然后用python编写出来,可以看出该js也是调用了s函数,生成的就是cookie,将cookie赋值给ac就可以了

ea2e116e85c86c44a8aaa22835938d0e.png

25b9e96268881ee7bf408f07f07f304f.png

调用思路

至此我们就可以去编写代码了,在第一次访问页面的时候先获取cookie,再将返回的js进行拆包,然后将w.document替换为获取的cookie,最后调用dc就可以成功获取mfccode参数

e062c88300aad2d51cbc84f6ca4b3c37.png
演示数据
<think> 我们被要求使用JavaScript脚本来读取外部TXT文档的内容并赋值给一个变量。根据用户上一次的问题,他想要的是在浏览器环境中使用JS读取本地或远程的TXT文件。 考虑两种场景: 1. 读取远程TXT文件(通过HTTP/HTTPS) 2. 读取用户本地选择的TXT文件(通过File API) 由于用户没有明确是本地还是远程,我们将分别介绍两种方法。 另外,注意用户之前提到了Shell和bat脚本的例子,但那些是服务器端或命令行脚本,而JS通常在浏览器中运行,所以方法不同。 下面我们分别介绍两种场景的实现: </think> ### JavaScript读取TXT文档内容并赋值的实现方法 #### 1. **读取远程TXT文档(通过HTTP请求)** 适用于从服务器获取TXT文件内容: ```javascript // 使用Fetch API(现代浏览器推荐) async function fetchTextFile(url) { try { const response = await fetch(url); if (!response.ok) throw new Error(`HTTP错误! 状态码: ${response.status}`); // 将文件内容赋值变量 const fileContent = await response.text(); console.log("文件内容:", fileContent); return fileContent; } catch (error) { console.error("加载失败:", error); } } // 调用示例 const txtContent = await fetchTextFile('example.txt'); ``` #### 2. **读取本地TXT文件(通过文件选择器)** 适用于用户本地上传的TXT文件: ```javascript // HTML: <input type="file" id="fileInput" accept=".txt"> function handleFileSelect() { const fileInput = document.getElementById('fileInput'); const file = fileInput.files[0]; if (!file) return; const reader = new FileReader(); reader.onload = function(e) { // 将文件内容赋值变量 const fileContent = e.target.result; console.log("文件内容:", fileContent); // 处理内容... }; reader.onerror = function() { console.error("文件读取错误"); }; reader.readAsText(file); } // 绑定事件 document.getElementById('fileInput').addEventListener('change', handleFileSelect); ``` #### 3. **逐行处理内容(类似Shell示例)** 实现类似Shell脚本的逐行处理功能: ```javascript async function processTextFile(url) { const content = await fetchTextFile(url); const lines = content.split('\n'); lines.forEach(line => { if (!line.trim()) return; // 跳过空行 // 按空格分割(类似awk) const [label, name] = line.trim().split(/\s+/); // 变量赋值 console.log(`Label: ${label}, Name: ${name}`); // 替换文本(类似sed) const template = "this is label, name is Name"; const replaced = template.replace('label', label).replace('Name', name); console.log(replaced); }); } // 调用示例 processTextFile('data.txt'); ``` ### 关键说明 1. **跨域问题解决方案**: - 服务端需设置CORS头:`Access-Control-Allow-Origin: *` - 本地开发可在浏览器禁用安全策略(仅测试用) 2. **文件处理注意事项**: - 使用`trim()`去除首尾空白字符 - 正则表达式`/\s+/`处理连续空格 - `split('\n')`兼容Unix/Linux换行符 3. **安全限制**: - 浏览器禁止直接访问本地文件路径(需用户主动选择) - 敏感内容应通过HTTPS传输 - 验证文件内容防止XSS攻击 > 提示:现代JS使用`text()`方法自动处理文本编码,无需手动解码[^1]。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值