Я борюсь с неожиданным поведением в веб-скребке Python 3 на основе Selenium и хочу понять, что происходит:
Я анализирую сайты с предложениями работы. После первоначального поиска я получаю от 1 до n сайтов результатов. Это количество сайтов показано на самой первой странице в виде текстовой части элемента "m-pagination__meta" и отображается на немецком языке, например, «1 фон 48». Мне нужна эта строка для дальнейшей обработки. Он находится на сайте, он НЕ является частью iframe.
Пример ссылки на сайте вакансий
HTML:
<div class="m-pagination">
<div class="m-pagination__inner m-pagination__inner--borderBottom">
<button class="m-pagination__button m-pagination__button--disabled" data-page="" data-event-action="click: pagination-first">
<svg viewBox="0 0 17 17" width="0" height="0" class="m-icon m-icon--large ">
<g fill="none" stroke="currentColor" stroke-width=".7" stroke-linecap="round" stroke-linejoin="round">
<path d="M9 13.2L4.2 8.5 9 3.8"></path>
<path d="M12.8 13.2L8 8.5l4.7-4.7"></path>
</g>
</svg>
</button>
<button class="m-pagination__button m-pagination__button--previous m-pagination__button--disabled" data-page="false" data-event-action="click: pagination-previous">
<svg viewBox="0 0 17 17" width="0" height="0" class="m-icon m-icon--large ">
<path fill="none" stroke="currentColor" stroke-width=".8" stroke-linecap="round" stroke-linejoin="round" d="M10.9 3.8L6 8.6l4.7 4.6"></path>
</svg>
</button>
<span class="m-pagination__meta" data-number="1"> 1 von 43 </span>
<button class="m-pagination__button m-pagination__button--next m-pagination__button--available" data-page="2" data-event-action="click: pagination-next">
<svg viewBox="0 0 17 17" width="0" height="0" class="m-icon m-icon--large ">
<path fill="none" stroke="currentColor" stroke-width=".7" stroke-linecap="round" stroke-linejoin="round" d="M6.1 3.8L11 8.6l-4.7 4.6"></path>
</svg>
</button>
</div>
</div>
Теперь начинается странная часть: Когда я отлаживаю программу и пытаюсь получить доступ к строковому элементу напрямую с помощью "m-pagination__meta" .text, он возвращает пустую строку.
Тем не менее, когда я обращаюсь к объекту материнского элемента m-pagination__meta и проверяю его с помощью отладчика, прокручивая до свойства text ожидаемую строку «1 von 48», она находится там. После этой проверки я могу получить доступ к "m-pagination__meta" .text с ожидаемыми результатами.
Это поведение, похоже, не зависит от времени. Я пытался дождаться наличия необходимого элемента с кодом типа
wait = WebDriverWait(self.driver, 10)
wait.until(EC.text_to_be_present_in_element((By.CLASS_NAME,"m-pagination__meta"), "1 von 48"))
pagesTotal = int(self.driver.find_element_by_class_name("m-pagination__meta").text.split(" ")[2])
безрезультатно (конечно, я понял, что глупо искать определенную строку, когда я не знаю, какую именно она выдаст, но я не знал, как еще ее кодировать).
Я также пробовал "нормальное" ожидание с использованием режима сна, но, похоже, ничего не работает, только упомянутая проверка в отладчике, которая бесполезна для производственных целей.
Мне бы очень хотелось понять, что здесь происходит.