So erhalten Sie bestimmten Text, der zur div-Klasse gehört
<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
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 undstrip()
: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()
undsplitlines()
: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