(предупреждение о селене / веб-скопировании.)
selenium 3.141.0
chromedriver 78
MacOS 10.14.6
Я составляю список URL-адресов по диапазону дат для последующей загрузки. URL-адреса находятся в таблице, которая отображает информацию о дате, выбранной в ближайшем календаре. Когда пользователь щелкает новую дату в календаре, таблица обновляется асинхронно с новым списком URL-адресов или - если файлов на эту дату не существует - с сообщением внутри тега <td class="dataTables_empty">
.
Для каждогодата в желаемом диапазоне, мой код щелкает по календарю, используя WebDriverWait
с пользовательским expectation
, чтобы отслеживать изменение первого значения href
в таблице (указывая, что таблица закончила обновление), и удаляет URL-адреса для этогодень. Если на определенную дату нет файлов, код ищет тег dataTables_empty
, чтобы убрать, чтобы указать, что URL следующей даты загружены.
if current_first_uri != NO_ATT_DATA:
element = WebDriverWait(browser, 10).until_not(
text_to_be_present_in_href((
By.XPATH, first_uri_in_att_xpath),
current_first_uri))
else:
element = WebDriverWait(browser, 10).until_not(
EC.presence_of_element_located((
By.CLASS_NAME, "dataTables_empty")))
Это прекрасно работает во всех моих случаях использования, кроме одного: если два или более дней подряд не имеют данных, код не замечает, что таблица обновилась, поскольку класс dataTables_empty
остается втаблица (и ячейка идентична во всех остальных отношениях).
В инспекторе Chrome, когда я щелкаю одну дату без данных, соответствующая <td>
мигает розовым. Это говорит о том, что значения обновляются, даже если их значения остаются прежними.
Вопросы:
- Есть ли в Selenium механизм для определения того, что значениебыло обновлено , даже если оно не изменилось ?
- Если нет, какие-нибудь творческие идеи о том, как определить, обновилась ли таблица в случае проблемного использования? Я не хочу ждать вслепую в течение некоторого произвольного промежутка времени.
ОБНОВЛЕНИЕ: Принятый ответ ответил на последний из двух вопросов, и я смогзаменить всю мою схему обнаружения с помощью MutationObserver.