找回密码
 注册
搜索
[新手上路]批处理新手入门导读[视频教程]批处理基础视频教程[视频教程]VBS基础视频教程[批处理精品]批处理版照片整理器
[批处理精品]纯批处理备份&还原驱动[批处理精品]CMD命令50条不能说的秘密[在线下载]第三方命令行工具[在线帮助]VBScript / JScript 在线参考
查看: 7602|回复: 6

[问题求助] PowerShell获取html网页乱码, 链接文本不一致

[复制链接]
发表于 2024-11-11 06:14:27 | 显示全部楼层 |阅读模式
我想 获取 网页 https://tim.qq.com/download.html 中的 "windows版" 下面的 "下载" 按钮的链接, 遇到的问题是:
1.使用下面的代码获取到的html文本中中文显示为乱码,
2. 并且奇怪的是, html文本中的链接居然是老版本的链接:
https://dldir1.qq.com/qqfile/qq/TIM2.3.2/21168/TIM2.3.2.21168.exe
而实际手动打开网页后, 将鼠标放到按钮上的链接却显示如下, 真是出怪事了, 求大佬指教, 多谢
https://dldir1.qq.com/qqfile/qq/TIM3.5.0/TIM3.5.0.22143.exe
我是在powershell ise中测试的
  1. cls
  2. # 请求地址
  3. $url = "https://tim.qq.com/download.html"

  4. # 发送请求并获取原始 HTML 内容
  5. $response = irm -Uri $url


  6. # 输出原始 HTML 内容以便检查
  7. Write-Host $response

复制代码
发表于 2024-11-11 12:04:56 | 显示全部楼层
被js动态修改了href
解析下面api获取真实链接 https://im.qq.com/rainbow/TIMDownload/
或者使用selenium抓取
发表于 2024-11-11 12:19:57 | 显示全部楼层
  1. # download TIM.exe
  2. # ps5.1 $result.Content 乱码:utf8解析成ANSI,建议用pwsh 7+
  3. $result = Invoke-WebRequest -Uri 'https://im.qq.com/rainbow/TIMDownload/' -UseBasicParsing
  4. if ($result.Content -match '(?s)(?>var\s+params\s*=[^{]*)(?<body>\{(?>/\*.*?\*/|//[^\n]*|"(?>""|\"|[^"])*"|[^{}]|(?<o>{)|(?<-o>}))*}(?(o)(?!)))') {
  5.   $ojson = ConvertFrom-Json $Matches['body']
  6.   $ojson.app.download
  7. }
复制代码
乱码不影响下载链接的读取.建议用pwsh 7+

评分

参与人数 1技术 +1 收起 理由
小白龙 + 1 乐于助人

查看全部评分

 楼主| 发表于 2024-11-11 13:23:07 | 显示全部楼层
回复 2# went


   多谢楼上两位大佬,

请问 https://im.qq.com/rainbow/TIMDownload/ 这个链接是怎么得到的?
 楼主| 发表于 2024-11-11 13:24:16 | 显示全部楼层
本帖最后由 小白龙 于 2024-11-11 13:29 编辑

回复 3# flashercs


    大佬, 用Invoke-WebRequest 是不是不太可靠? 如果ie没有安装或初始化, 将获取不到html文本

另外, ps5.1乱码的问题, 怎样修复一下?
发表于 2024-11-11 14:02:22 | 显示全部楼层
回复 5# 小白龙


    去掉参数 -UseBasicParsing 会解析htmldom
乱码解决可用用System.Net.WebClient
  1. [System.Net.ServicePointManager]::SecurityProtocol = [System.Net.ServicePointManager]::SecurityProtocol -bor [Net.SecurityProtocolType]::Tls12
  2. $webclient = New-Object System.Net.WebClient
  3. $webclient.Encoding = New-Object System.Text.UTF8Encoding -ArgumentList $false
  4. $result = $webclient.DownloadString('https://im.qq.com/rainbow/TIMDownload/')
  5. if ($result -match '(?s)(?>var\s+params\s*=[^{]*)(?<body>\{(?>/\*.*?\*/|//[^\n]*|"(?>""|\"|[^"])*"|[^{}]|(?<o>{)|(?<-o>}))*}(?(o)(?!)))') {
  6.   $ojson = ConvertFrom-Json $Matches['body']
  7.   $ojson.app.download
  8. }
  9. $webclient.Dispose()
复制代码
发表于 2024-11-11 16:53:34 | 显示全部楼层
回复 4# 小白龙


    f12
您需要登录后才可以回帖 登录 | 注册

本版积分规则

Archiver|手机版|小黑屋|批处理之家 ( 渝ICP备10000708号 )

GMT+8, 2026-3-17 04:26 , Processed in 0.016493 second(s), 9 queries , File On.

Powered by Discuz! X3.5

© 2001-2026 Discuz! Team.

快速回复 返回顶部 返回列表