c # не удалось получить элемент на странице содержимого с помощью getelementbyid, getelementsbytagname - PullRequest
0 голосов
/ 05 июля 2018

Я отправил тот же вопрос, но публикую его снова, так как у меня пока нет ответов на этот пост.

Я пытаюсь получить некоторую информацию (например, tagName, id с использованием метода GetElementsByTagName или GetElementById) со страницы содержимого на веб-сайте с использованием winforms.

enter image description here

Как вы видите прикрепленные изображения, независимо от того, какой выбор вы делаете (select1, select2, select3 и т. Д.), Веб-адрес остается неизменным. однако содержимое под этими вариантами на странице содержимого отличается.

Я пытаюсь получить доступ к tagName (или идентификатору) из одного из них (не для выбора, а для содержимого в рамках определенного выбора).

Я отладил и выяснил (или, похоже, что) Я не могу получить доступ к tagName (или id) из любого из этих материалов в рамках определенного выбора.

Кажется, я могу получить доступ только к tagName (или id) с главной страницы. Рисунок 3 поможет лучше объяснить некоторые термины, такие как главная страница, страница содержимого.

Я попытался объяснить подробно, если мой вопрос все еще неясен, дайте мне знать, плз. Мой код выглядит так.

var countGetFile = webBrowser1.Document.GetElementsByTagName("IFRAME");
foreach (HtmlElement l in countGetFile)
{
    if (l.GetAttribute("width").Equals("100%"))
    {
        MessageBox.Show(l.GetAttribute("height").ToString());
        MessageBox.Show(l.GetAttribute("outerText").ToString());
    }
}

1 Ответ

0 голосов
/ 16 июля 2018

Мне не удалось получить информацию ниже 2 уровня # документа из HTML.

HTML выглядит как

...
    <src="..." id="A" ... >
    #document
        ...
        <src="..." id="B" ... >
        #document
            ...
            <span="C" ...>
            ...

Я могу получить информацию о диапазоне (третьи фигурные скобки) с кодами, похожими на

HtmlWindow frame1 = webBrowser1.Document.GetElementById("A").Document.Window.Frames["A"];

HtmlWindow frame2 = frame1.Document.GetElementById("B").Document.Window.Frames["B"];


foreach (HtmlElement elm in frame2.Document.All)
{
    if (elm.GetAttribute("tagName").Equals("C"))
    {
        // your command             
    }
}

для использования Document.Window.Frames вам нужен заголовок с использованием "System.Collections";

Кстати, есть проблема. Когда я пытаюсь получить доступ к информации в третьей фигурной скобке, мне нужно выполнить некоторые виды работы между frame1 и frame2, такие как задержка на frame2, чтобы иметь достаточно времени для доступа к следующему уровню после frame1.

Я подумал, что это что-то вроде хака. Поместите всплывающее окно для кратковременной задержки или поместите функцию задержки (без остановки) с асинхронным кодом, похожим на

async Task PutTaskDelay()
{
    await Task.Delay(5000);//5 secs
}

Я только что нашел временное решение для доступа ко второму уровню. Я буду признателен всем, кто знает некоторые способы решения этой проблемы.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...