Как я могу извлечь текст из тега div с атрибутом стиля, установленным как «display: none;» через селен

avatar
yguw
8 апреля 2018 в 03:08
114
3
0

Мой html выглядит так:

<div class="row">
    <div class="col-md-7">
        <ul class="breadcrumb">
            <li id="get_data"><a href="#">Get data</a></li>
            <li id="sampling_task"><a href="#">Sampling</a></li>
            <li id="confirm_task"><a href="#">Confirmation</a></li>
        </ul>

        <div class="container-fluid">
            <form action="#" method="post" enctype="multipart/form-data" role="form" class="form-horizontal">
                {% csrf_token %}
                <div class="form-group">
                    <label for="id_fileA" class="col-sm-3 control-label" style="text-align: left">
                        Select dataset A<span class='required_label'>*</span>
                    </label>
                    <div class="col-sm-9">
                        {{ form.fileA|attr:"class:form-control" }}
                    </div>
                </div>

                <div class="form-group"></div>

                <div class="form-group">
                    <label for="id_fileB" class="col-sm-3 control-label" style="text-align: left">
                        Select dataset B<span class='required_label'>*</span>
                    </label>
                    <div class="col-sm-9">
                        {{ form.fileB|attr:"class:form-control" }}
                    </div>
                </div>

                <div class="form-group"></div>

                <div class="form-group" id="sample_btn" style="display: none">
                    <label class="col-sm-3 control-label"></label>
                    <div class="col-sm-9">
                        <input type="button" name="theButton" id="sample-step" value="Start Sampling" class="btn btn-success btn-large disabled" style="border-radius: 5px;">
                    </div>
                </div>

                <div class="form-group">
                    <div class="col-sm-9 col-sm-offset-3" id="sample_msg" style="display: none;">
                        <p id="sample_text" style="font-size: medium">
                            Some ABCD message
                        </p>
                    </div>
                </div>

                <div class="form-group">
                    <div class="col-sm-9 col-sm-offset-3" id="get_sample_confirm_msg" style="display: none;">
                        <p>
                        <input type="button" style="height: 40px; width: 140px; border-radius: 5px" name="YesButton" id="accept-step" value="Accept & Continue" class="btn btn-success disabled">
                        <input type="button" style="height: 40px; width: 140px; border-radius: 5px" name="NoButton" id="cancel-step" value="Cancel Sampling" class="btn btn-danger disabled">
                        </p>
                    </div>
                </div>
            </form>
        </div>
    </div>
    <div class="col-md-5">
    </div>
</div>

Бэкэнд представляет собой javascript, и при нажатии кнопки он выполняет обработку, и если что-то не получается, код javascript обновляет сообщение.

var error = "<div class='alert alert-danger'><p>We encountered an error while sampling: <br /><strong>Sampling failed!!</strong></p>"; error += "<p>Please <a href='mailto:abcd@gmail.com'>contact us</a> if this error persists.</p>";
error += "</div>";
$('#sample_msg').html(error);

Теперь в моем коде селена, если я сделаю это:

sample_msg = self.driver.find_element_by_id('sample_msg')

Я получаю пустой список. Что я хочу сделать, так это прочитать ошибку в классе «sample_msg», если таковая имеется, и я пробовал несколько вещей, но это не сработало. Помощь приветствуется. Спасибо.

Источник
Andersson
8 апреля 2018 в 09:12
0

Не могли бы вы рассказать немного о "Я получаю пустой список результатов"? find_element_by_id() обычно возвращает WebElement или NoSuchElementException, если элемент не найден, но никогда не возвращает пустой/непустой список

Ответы (3)

avatar
Andersson
8 апреля 2018 в 09:10
1

Если вы хотите получить доступ к скрытому тексту, вам может понадобиться код ниже:

sample_msg = self.driver.find_element_by_id('sample_msg').get_attribute('textContent').strip()

Обратите внимание, что свойство text позволяет получать текст только из видимых элементов

avatar
sunny_teo
8 апреля 2018 в 06:59
0

Итак, вам нужно подождать некоторое время после нажатия кнопки, и как только появится какое-то сообщение, вам нужно извлечь это сообщение. Попробуйте ниже:-

ожидание WebDriverWait = new WebDriverWait(webDriver, timeoutInSeconds); ждать.пока(ОжидаемыеУсловия.видимостьОфЭлементЛокатед(По.идентификатору)); или

wait.until(ExpectedConditions.elementToBeClickable(By.id)); если быть точным.

См. также:

org.openqa.selenium.support.ui.ExpectedConditions для аналогичных ярлыков для различных сценариев ожидания. org.openqa.selenium.support.ui.WebDriverWait для его различных конструкторов.

Вы также можете проверить синтаксис Python по приведенным выше ссылкам.

avatar
undetected Selenium
8 апреля 2018 в 06:51
0

Как вы пытаетесь извлечь сообщение об ошибке Некоторые ABCD Сообщение Это содержится в пределах <p> Тег, который имеет родитель <div> Тег с Стиль Установка атрибута AS отображение: нет;. Таким образом, для извлечения текста вы можете использовать следующий блок кода:

element = driver.find_element_by_xpath("//div[@class='form-group']/div[@id='sample_msg']")
driver.execute_script("arguments[0].removeAttribute('style')", element)
print(driver.find_element_by_xpath("//div[@class='form-group']/div[@id='sample_msg']/p").get_attribute("innerHTML"))