So erhalten Sie bestimmten Text, der zur div-Klasse gehört

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>

Erstens erhalte ich Daten von einer Website und wende diese Daten an, um sie mithilfe von Pandas zu übertreffen.

Ich habe einen HTML-Code wie oben angegeben. Ich möchte die Telefonnummer, die nach dem kommt, nehmen <i class='phone'>und die andere weitergeben. Die Telefonnummer gehört jedoch nicht zu meiner Klasse, so dass ich die Nummern nur erhalten konnte, indem ich 'xpath' von bekam, <div class='col_5'>aber dies ist für mich nicht sicher, da einige 'divs' nicht die Telefonnummer haben und nur die Drucknummer haben und dies könnte sein tödlich für mich. Zum Beispiel versuche ich, den xpath von <div class='col_5'>so zu finden

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

und die Ausgabe ist

['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>

Oben habe ich den Code geteilt, der nicht die Telefonnummer, sondern nur die Drucknummer enthält. Wenn ich den xpath von <div class='col_5'>im zweiten Code erhalte, erhalte ich nur die Drucknummer und währenddessen füge ich meine Datendrucknummer als Telefonnummer hinzu. Und das führt zu falschen Daten. Und wenn ich genau die gleichen Dinge mache wie oben angegeben, ist die Ausgabe

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

Wenn ich also versuche, den ersten Artikel zu nehmen, wird die Drucknummer verwendet. Wenn es eine Telefonnummer gibt, möchte ich sie nur nehmen, wenn nicht, nimm sie und gehe weiter. Ist das möglich?

Antworten

1 DebanjanB Jan 29 2021 at 04:42

Um den Text zu drucken 0212 / 897645, müssen Sie WebDriverWait für das induzieren visibility_of_element_located()und können eine der folgenden Locator-Strategien verwenden :

  • Unter Verwendung CSS_SELECTOR, childnodes und 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())
    
  • Unter Verwendung XPATH, get_attribute()und 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])
    
  • Hinweis : Sie müssen folgende Importe hinzufügen:

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

Verweise

Einige relevante ausführliche Diskussionen finden Sie in:

  • So rufen Sie mit Selenium und Python Teiltext von einem Textknoten ab
  • So erhalten Sie mit Selenium und Python Text von durch Leerzeichen getrennten Textknoten