#python #selenium-webdriver #web-scraping #tooltip
#python #selenium-webdriver #очистка веб-страниц #всплывающая подсказка
Вопрос:
Я пытаюсь очистить некоторый динамический контент, появляющийся при наведении курсора мыши. Я пробовал цепочки действий из Selenium для перемещения мыши и наведения курсора мыши, но не смог получить требуемый текст. Проблема в том, что я не могу получить конкретную позицию всплывающей подсказки в DOM. Я пытался получить его, используя опцию приостановки отладчика, но элемент не виден в DOM. вот ссылка на веб-страницу. https://www.capterra.com/p/174185/Weave-Accreditation/reviews /. Я также прилагаю скриншот, на котором красным прямоугольником выделен контент, который я хочу очистить.
Комментарии:
1. Ваши испытания кода?
Ответ №1:
В режиме приостановки работы отладчика мы можем выполнить поиск соответствующего div для этой всплывающей подсказки. Хитрость: перейдя в приостановленный режим отладчика, найдите строку всплывающей подсказки в HTML DOM. Смотрите ниже:
Основываясь на приведенном выше DOM, я использовал приведенный ниже код для печати текста всплывающей подсказки.
from selenium import webdriver
from selenium.webdriver import ActionChains
from selenium.webdriver.common.by import By
from selenium.webdriver.support.wait import WebDriverWait
driver = webdriver.Chrome('..driverschromedriver')
driver.get("https://www.capterra.com/p/174185/Weave-Accreditation/reviews/")
driver.maximize_window()
toolTip = WebDriverWait(driver, 10).until(EC.presence_of_element_located((By.XPATH, "//div[starts-with(text(),'Reviewer Source')]/div[contains(@class,'IconWrapper')][1]")))
hov = ActionChains(driver).move_to_element(toolTip)
txt = hov.perform()
tooltipText = WebDriverWait(driver, 10).until(EC.presence_of_element_located((By.XPATH, "//div[@class='tippy-content']"))).text
print(tooltipText)
Комментарии:
1. Хорошо, я понял вашу точку зрения. У меня это работает идеально. Спасибо.
2. еще одна вещь, я пытаюсь выполнить итерацию по веб-странице и получить точно такой же текст из всех разделов. не могли бы вы, пожалуйста, обновить скрипт для этого. Спасибо
3. я попытался обновить приведенный выше скрипт следующим образом. Всплывающая подсказка = WebDriverWait(драйвер, 10).до(EC.presence_of_element_located((By.XPATH, «//div[начинается с(text(),’Источник рецензента’)][2]/div[содержит (@class,’IconWrapper’)][1]»))), но он продолжает нажимать исключение тайм-аута
4. @AffifaTaskeen Причина, по которой вы получаете тайм-аут, заключается в том, что используемый вами XPath не идентифицирует какой-либо элемент. Всегда рекомендуется проверять ваш xpath, скопировав его в Element Inspect (F12)> Вкладка элемента> Поиск (Ctrf F) > Ваш XPath. Если оно правильное, оно покажет, сколько элементов идентифицировано им.
5. Возвращаясь к вашему вопросу, не могли бы вы уточнить, какой текст all divs вы хотите напечатать? Как и на вашей странице, на вашей странице всего 1384 раздела :). В любом случае попробуйте что-нибудь с методом findelements и выполните итерацию по всем разделам. Еще одна просьба, пожалуйста, запустите отдельную ветку вопросов, если ваша первоначальная проблема решена. Приветствия!!!