положение элемента меняется после повторного отображения элемента selenium

#python #python-3.x #selenium #web-scraping #webdriver

Вопрос:

Я выполняю ту же операцию для тегов «Автор» и «О привязке».

Код для поиска элемента

 element = driver.find_element('class_name','author')
 

Код для скрытия элемента

 driver.execute_script("arguments[0].style.display = 'None';", element)
 

код для отображения элемента

 driver.execute_script("arguments[0].style.display = 'block';", element)
 

введите описание изображения здесь

Вопрос
почему имя автора и положение элемента изменились после повторного показа тех же элементов?

Ссылка на веб-сайт : https://quotes.toscrape.com/

Комментарии:

1. Вы можете поделиться ссылкой на сайт?

2. @LibinThomas Я добавил ссылку на сайт в выпуске

Ответ №1:

https://www.w3schools.com/cssref/pr_class_display.asp

блок отображает элемент в следующей строке. полностью удалите это свойство или используйте встроенное

 driver.execute_script("arguments[0].style.display = undefined;", element)
 

или

 driver.execute_script("arguments[0].style.display = 'inline';", element)
 

Комментарии:

1. теперь он отлично работает со встроенным. Есть ли какие-либо ограничения при использовании встроенного?

2. я так не думаю

Ответ №2:

Имя автора и текстовая ссылка «о программе» указаны в двух разных строках. Вместо того, чтобы просто скрывать строку автора с использованием имени класса, я бы предложил попробовать скрыть всю span

Xpath для того же будет xpath = "/html/body/div/div[2]/div[1]/div[1]/span[2]"

Если вы хотите сохранить текст «по«, попробуйте указать отдельные переменные, чтобы найти элемент двух строк и скрыть/отобразить их по отдельности. Это не должно изменять структуру html-элементов. введите описание изображения здесь

Попробуйте это и дайте мне знать, сработало ли это.

Комментарии:

1. ранее моя мысль была такой же, чтобы скрыть родительский элемент вместо отдельного элемента, но я работаю над написанием утилит для selenium WebDriver, и я застрял здесь, поэтому я просто хочу понять, почему это происходит

2. Как только вы добавите видимость линии, добавьте time.sleep около 2-3 минут. Проверьте html-код вручную и проверьте, есть ли в нем какая-либо разница по сравнению с предыдущим.