#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-код вручную и проверьте, есть ли в нем какая-либо разница по сравнению с предыдущим.