Как получить CSS-селектор для текста - PullRequest
1 голос
/ 25 мая 2019

Я пытаюсь удалить какое-то свидание с Selenium (Python) с веб-сайта.Я хочу сохранить текст из rollover-s1 lastbooking и из rollover-s2 sr - x-times-last-time class.

Воткод с сайта:

<div data-component="onview-animate" data-anim-type="rollover" data-anim-trigger="mouseenter" class="sr--x-times-booked js_sr_persuation_msg">
    <div class="rollover-s1 lastbooking" rel="300">
3-mal gebucht für Ihre Daten in den letzten 12 Stunden auf unserer Seite
    </div>
    <div class="rollover-s2 sr--x-times-last-time" rel="300">
Zuletzt gebucht  für Ihre Daten vor 2 Stunden
    </div>
</div>

Вот мой код Python:

first = hotel.find_elements_by_css_selector("div.rollover-s1.lastbooking")
second = hotel.find_elements_by_css_selector("div.rollover-s2.sr--x-times-last-time")

Странно то, что я получаю текст 3-mal gebucht für Ihre Daten вden letzten 12 Stunden auf unserer Seite для первого класса, но я получил пустую строку "" для второго класса.

Знаете ли вы, что я делаю неправильно для второго класса?

Ответы [ 2 ]

0 голосов
/ 25 мая 2019

Требуемый элемент - это элемент React , поэтому, чтобы сначала найти этот элемент, необходимо вызвать WebDriverWait , чтобы элемент был активным , и вы можете использовать любой из них. из следующих решений:

  • Использование CSS_SELECTOR:

    print(WebDriverWait(driver, 20).until(EC.element_to_be_clickable((By.CSS_SELECTOR, "div.sr--x-times-booked.js_sr_persuation_msg[data-component='onview-animate'] div.rollover-s2.sr--x-times-last-time"))).get_attribute("innerHTML"))
    
  • Использование XPATH:

    print(WebDriverWait(driver, 20).until(EC.element_to_be_clickable((By.XPATH, "//div[@class='sr--x-times-booked js_sr_persuation_msg' and @data-component='onview-animate']//div[@class='rollover-s2 sr--x-times-last-time']"))).get_attribute("innerHTML"))
    
  • Примечание : необходимо добавить следующие операции импорта:

    from selenium.webdriver.support.ui import WebDriverWait
    from selenium.webdriver.common.by import By
    from selenium.webdriver.support import expected_conditions as EC
    
0 голосов
/ 25 мая 2019

Ваш селектор CSS уже правильно.На самом деле вы могли бы использовать более короткие:

  1. ". Rollover-s1"
  2. ". Rollover-s2"

Теперь, чтобы выяснитьпочему второй показывает пустой, посмотрите сценарий в действии и посмотрите, был ли второй ролловер обработан иначе, чем первый.1-й в настоящее время показывает, а 2-й скрыт?Оба скрыты, но 2-й никогда не запускался / не показывался на странице?

...