Как получить конкретный текст, принадлежащий классу div

Jan 29 2021

<div class="col_5"> 
       <br>
            <i class="phone">
                  :: Before
                  </i>
                  0212 / 897645
            <br>
                  
                  <i class="print">
                  :: Before
                  </i>
                  0212 / 111111
            <br>
       <br>
</div>

Во-первых, я получаю данные с веб-сайта и применяю эти данные для Excel с помощью панд.

У меня есть html-код, как указано выше. Я хочу взять номер телефона, который стоит после, <i class='phone'>и передать другой. Однако номер телефона не принадлежит к I классу, поэтому я мог получить номера только с помощью xpath, <div class='col_5'>но это небезопасно для меня, потому что некоторые divs не имеют номера телефона и имеют только номер для печати, и это может быть смертельно опасен для меня. Например , я стараюсь найти в XPath <div class='col_5'>подобное

num = browser.find_element_by_xpath('div[1]/div/div[103]/div[2]')
num.text.split('\n')

и выход

['02243 / 80343', '02243 / 83261']

<div class="col_5"> 
       <br>
            <i class="phone">
                  ::Before
                  </i>
                  
               <br>
                  <i class="print">
                  ::Before
                  </i> 
                  0201 / 623424
               <br>
        <br>
        <a href="mailto:[email protected]"> <i class="envelope"> </i> E-Mail</a>
 </div>

Выше я поделился кодом, в котором нет номера телефона, но есть только номер для печати. Когда я получаю xpath из <div class='col_5'>второго кода, я получаю только номер печати, и пока это происходит, я добавляю свой номер печати данных в качестве номера телефона. И это приводит к неверным данным. И когда я делаю то же самое, что указано выше, на выходе получается

['0201 / 623424', '', 'E-Mail']

Поэтому, когда я пытаюсь взять первый предмет, он берет номер печати. Если есть номер телефона, я просто хочу взять его, если нет, беру и иду дальше. Это возможно?

Ответы

1 DebanjanB Jan 29 2021 at 04:42

Чтобы напечатать текст, 0212 / 897645вы должны вызвать WebDriverWait для, visibility_of_element_located()и вы можете использовать любую из следующих стратегий локатора :

  • Использование CSS_SELECTOR, childNodes и strip():

    print(driver.execute_script('return arguments[0].childNodes[5].textContent;', WebDriverWait(driver, 20).until(EC.visibility_of_element_located((By.CSS_SELECTOR, "div.col_5")))).strip())
    
  • Использование XPATH, get_attribute()и splitlines():

    print(WebDriverWait(driver, 20).until(EC.visibility_of_element_located((By.XPATH, "//div[1]/div/div[103]/div[2]"))).get_attribute("innerHTML").splitlines()[4])
    
  • Примечание . Вам необходимо добавить следующий импорт:

    from selenium.webdriver.support.ui import WebDriverWait
    from selenium.webdriver.common.by import By
    from selenium.webdriver.support import expected_conditions as EC
    

Рекомендации

Вы можете найти пару соответствующих подробных обсуждений в:

  • Как получить частичный текст из текстового узла с помощью Selenium и Python
  • Как получить текст из текстовых узлов, разделенных пробелами, с помощью Selenium и Python