#html #flutter #http #dart #flutter2.0
Вопрос:
Я пытаюсь получить реальные цены на золото с веб-сайта, используя этот код.
import 'package:http/http.dart' as http;
import 'package:html/dom.dart' as dom;
import 'package:html/parser.dart' as parser;
getWebData() async {
final response = await http.get(Uri.parse(
"https://www.mcxindia.com/en/market-data/get-quote/FUTCOM/GOLD/05FEB2021"));
dom.Document document = parser.parse(response.body);
print(document);
var element = document.getElementById("litPrice");
}
Я знаю, как извлекать текст, когда он находится между <a>
тегом или <p>
тегом, но в данном случае это просто между <span>
тегом, который выглядит так
<span id="litPrice">47526</span>
Я не могу понять, как получить этот номер.
Ответ №1:
Метод будет таким же, как и в случае <a>
с <p>
тегами and. Текст между тегами доступен через element.innerHtml
Я думаю, что проблема, с которой вы сталкиваетесь, заключается в том, что выбранный вами тег отсутствует в документе, возвращенном с этого URL-адреса. В браузере этот элемент вставляется в документ с помощью javascript после загрузки документа.
Есть несколько способов, как вы могли бы справиться с этим:
- Используйте API — Если служба, к которой вы пытаетесь получить доступ, предоставляет API REST, вы можете увидеть, доступны ли данные, к которым вы пытаетесь получить доступ, по этому маршруту. Это гораздо лучший способ, если он доступен.
- Используйте браузер без головы — это действительно тяжеловесное решение, и, скорее всего, оно не подойдет для вашего варианта использования, но я все равно приведу его здесь в качестве одной из возможностей. В dart вы можете использовать библиотеку puppeteer для взаимодействия с браузером Chrome без головы. Таким образом, вы можете загрузить страницу, дождаться запуска сценариев, а затем очистить DOM — затем вы должны найти нужный элемент.
Комментарии:
1. Я пробовал
element.innerHtml
, но он ничего не печатает, ноelement.outerHtml
дает<span id="litPrice"></span>
не знаю почему.