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

Xamarin Android获取Google Play Store应用版本号问题求助

问题描述

我尝试了基于HtmlAgilityPack的旧方案来获取Google Play应用的版本号,代码如下:

newVersion = doc.DocumentNode.SelectNodes("//div[@itemprop='softwareVersion']")
                          .Select(p => p.InnerText)
                          .ToList()
                          .First()
                          .Trim();

同时也尝试了Jsoup的方案,代码如下:

var doc = client.GetAsync("https://play.google.com/store/apps/details?id=" + AppInfo.PackageName + "&hl=en_CA").Result.Parse();
var versionElement = doc.Select("div:containsOwn(Current Version)");

所有方法均返回空字符串,原因是Google Play Store页面结构已更新,旧的选择器不再生效,特此求助。

解决方案

Google Play页面结构已多次调整,目前(2024年)可通过以下方式获取版本号,同时需注意添加合法User-Agent请求头以避免被拦截:

1. HtmlAgilityPack 适配方案

// 初始化HttpClient并添加浏览器标识
var client = new HttpClient();
client.DefaultRequestHeaders.UserAgent.ParseAdd("Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/120.0.0.0 Safari/537.36");

var url = $"https://play.google.com/store/apps/details?id={AppInfo.PackageName}&hl=en";
var html = await client.GetStringAsync(url);

var doc = new HtmlDocument();
doc.LoadHtml(html);

// 定位"Current Version"元素,获取其相邻的版本值节点
var versionNode = doc.DocumentNode.SelectSingleNode("//div[contains(text(), 'Current Version')]/following-sibling::div");
if (versionNode != null)
{
    var newVersion = versionNode.InnerText.Trim();
    // 处理获取到的版本号
}

2. Jsoup 适配方案

// 初始化HttpClient并添加浏览器标识
var client = new HttpClient();
client.DefaultRequestHeaders.UserAgent.ParseAdd("Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/120.0.0.0 Safari/537.36");

var url = $"https://play.google.com/store/apps/details?id={AppInfo.PackageName}&hl=en";
var response = await client.GetAsync(url);
response.EnsureSuccessStatusCode();
var html = await response.Content.ReadAsStringAsync();

var doc = Jsoup.Parse(html);
// 定位版本号节点
var versionElement = doc.SelectXpath("//div[contains(text(), 'Current Version')]/following-sibling::div").FirstOrDefault();
if (versionElement != null)
{
    var newVersion = versionElement.Text().Trim();
    // 处理获取到的版本号
}

关键注意事项

  • 必须添加User-Agent:Google Play会拦截无标识的爬虫请求,添加标准浏览器的User-Agent可避免被屏蔽。
  • 页面结构可能再次变更:Google Play会不定期调整页面布局,若后续方案失效,需重新查看页面DOM结构更新选择器。
  • 优先使用异步调用:避免用.Result同步阻塞,改用await提升性能与稳定性。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.08 02:45:23