Board logo

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

作者: 小白龙    时间: 2024-11-11 06:14     标题: PowerShell获取html网页乱码, 链接文本不一致

我想 获取 网页 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
复制代码

作者: went    时间: 2024-11-11 12:04

被js动态修改了href
解析下面api获取真实链接 https://im.qq.com/rainbow/TIMDownload/
或者使用selenium抓取
作者: flashercs    时间: 2024-11-11 12:19

  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+
作者: 小白龙    时间: 2024-11-11 13:23

回复 2# went


   多谢楼上两位大佬,

请问 https://im.qq.com/rainbow/TIMDownload/ 这个链接是怎么得到的?
作者: 小白龙    时间: 2024-11-11 13:24

本帖最后由 小白龙 于 2024-11-11 13:29 编辑

回复 3# flashercs


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

另外, ps5.1乱码的问题, 怎样修复一下?
作者: flashercs    时间: 2024-11-11 14:02

回复 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()
复制代码

作者: went    时间: 2024-11-11 16:53

回复 4# 小白龙


    f12




欢迎光临 批处理之家 (http://www.bathome.net/) Powered by Discuz! 7.2