You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Windows 11下替代InternetExplorer.Application COM对象实现wgmods.net数据抓取的技术方案求助

解决方案:替代IE COM对象抓取wgmods.net模块详情链接

针对你在Windows 11下遇到的IE COM对象失效、Invoke-WebRequest被网站检测拦截的问题,这里有两个可行的方案,均基于真实浏览器自动化来模拟用户行为,完美绕过检测机制:


方案一:使用Playwright for PowerShell(推荐)

Playwright是微软官方推出的自动化测试工具,完美支持Edge等现代浏览器,能精准模拟真实用户的浏览流程,轻松避开大部分网站的反爬检测。

步骤1:安装Playwright模块与浏览器

打开管理员权限的PowerShell,执行以下命令:

# 安装Playwright PowerShell模块
Install-Module -Name Playwright -Force -Scope CurrentUser
# 安装Edge浏览器(Playwright会自动匹配对应版本)
pwsh bin/playwright.ps1 install msedge

步骤2:编写自动化抓取脚本

替换原IE脚本,用Playwright实现相同功能:

# 导入Playwright模块
Import-Module Playwright

# 指定要抓取的模块编号
$mod_nums = @(19, 22)
$my_arr = New-Object System.Collections.Generic.List[System.Object]

# 启动Edge浏览器(去掉--headless参数可切换为可视化模式)
using ($browser = Invoke-Playwright -Browser msedge -Headless) {
    foreach ($mod_num in $mod_nums) {
        if ($null -eq $mod_num) { break }
        
        # 打开模块页面,等待网络空闲确保页面完全加载
        $page = $browser.NewPage()
        $page.Goto("https://wgmods.net/$mod_num", @{ WaitUntil = 'networkidle' })
        
        # 定位目标元素并获取详情链接
        $detailLink = $page.Locator(".ModDetails_hidden--2Rtru").GetAttribute('href')
        if ($detailLink) {
            $my_arr.Add($detailLink)
            Write-Host "成功抓取模块$mod_num的详情链接:$detailLink"
        } else {
            Write-Warning "模块$mod_num未找到目标链接"
        }
        
        # 关闭当前页面释放资源
        $page.Close()
    }
}

# 输出最终抓取结果
Write-Host "`n所有抓取到的链接:"
$my_arr | ForEach-Object { Write-Host $_ }

这个方案的优势:

  • 完全脱离IE依赖,适配Windows 11现代环境
  • 内置智能等待机制,避免页面未加载完成导致的元素定位失败
  • 支持无头模式后台运行,适合批量抓取场景
  • 模拟真实用户行为,不会被网站的浏览器检测拦截

方案二:使用Selenium配合Edge IE模式(兼容旧网站IE检测)

如果wgmods.net强制要求IE内核环境,你可以配置Edge的IE模式,并用Selenium控制它完成抓取:

步骤1:配置Edge IE模式

  1. 打开Edge浏览器,进入edge://settings/defaultBrowser
  2. 将“允许在Internet Explorer模式下重新加载网站”设置为“允许”
  3. 添加wgmods.net到“Internet Explorer模式页面”列表

步骤2:安装Selenium与EdgeDriver

# 安装Selenium PowerShell模块
Install-Module -Name Selenium -Force -Scope CurrentUser
# 下载与你的Edge版本完全匹配的EdgeDriver,解压后将其路径添加到系统环境变量PATH中

步骤3:编写Selenium抓取脚本

# 导入Selenium模块
Import-Module Selenium

$mod_nums = @(19, 22)
$my_arr = New-Object System.Collections.Generic.List[System.Object]

# 配置Edge IE模式启动选项
$edgeOptions = New-Object OpenQA.Selenium.Edge.EdgeOptions
$edgeOptions.AddArgument("--ie-mode")
$edgeOptions.AddArgument("--inprivate") # 可选,以隐私模式运行

# 启动Edge浏览器(IE模式)
using ($driver = New-Object OpenQA.Selenium.Edge.EdgeDriver($edgeOptions)) {
    foreach ($mod_num in $mod_nums) {
        if ($null -eq $mod_num) { break }
        
        # 导航到模块页面
        $driver.Navigate().GoToUrl("https://wgmods.net/$mod_num")
        # 等待页面加载(也可使用显式等待替代固定延迟,更可靠)
        Start-Sleep -Seconds 2
        
        # 定位目标元素并获取详情链接
        try {
            $element = $driver.FindElement([OpenQA.Selenium.By]::ClassName("ModDetails_hidden--2Rtru"))
            $detailLink = $element.GetAttribute('href')
            $my_arr.Add($detailLink)
            Write-Host "成功抓取模块$mod_num的详情链接:$detailLink"
        } catch {
            Write-Warning "模块$mod_num未找到目标链接:$_"
        }
    }
}

# 输出最终抓取结果
Write-Host "`n所有抓取到的链接:"
$my_arr | ForEach-Object { Write-Host $_ }

注意:必须保证EdgeDriver版本与你的Edge浏览器版本完全一致,否则会出现浏览器启动失败的问题。


方案可行性说明

两种方案均基于真实浏览器渲染页面,完全模拟用户的浏览行为,能够完美绕过Invoke-WebRequest遇到的浏览器检测;Playwright方案无需额外配置IE模式,更适配现代系统;Selenium方案则适合网站强制要求IE内核的场景。

内容的提问来源于stack exchange,提问作者JustDj

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.04.30 04:34:08