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
相关产品推荐
相关产品推荐

