J'ai besoin du frère d'un ou plusieurs éléments précédemment sélectionnés.
Par exemple:
Dimensions - 149.9 x 70.4 x 7.8 mm (5.90 x 2.77 x 0.31 in) Type - Dynamic AMOLED capacitive touchscreen, 16M colors
Disons que j'ai besoin des "Dimensions" et du type.
code:
dts = browser.find_elements_by_class_name("dt");
for dt in dts :
if dt.("innerText") == "Dimensions":
print(dt.("innerText") + "-" + dt.**FollowingSibling**())
if dt.("innerText") == "Type":
print(dt.("innerText") + "-" + dt.**FollowingSibling**())
résultat attendu:
<div class="dt">Technology</div> <div class="da">GSM / CDMA / HSPA / EVDO / LTE</div> <div class="dt">Dimensions</div> <div class="da">149.9 x 70.4 x 7.8 mm (5.90 x 2.77 x 0.31 in)</div> <div class="dt">Weight</div> <div class="da">157 g (5.54 oz)</div> <div class="dt">Build</div> <div class="da">Back glass (Gorilla Glass 5), aluminum frame </div> <div class="dt">Type</div> <div class="da">Dynamic AMOLED capacitive touchscreen, 16M colors</div> <div class="dt">SIM</div> <div class="da">Single SIM (Nano-SIM) or Hybrid Dual SIM)</div>
3 Réponses :
Essayez avec le code suivant (recherche d'éléments par xpath):
dts = browser.find_elements_by_class_name("dt");
for dt in dts :
if dt.("innerText") == "Dimensions":
print(dt.("innerText") + "-" + dt.xpath("//div[contains(.,'Dimensions')]/following-sibling::div").text)
if dt.("innerText") == "Type":
print(dt.("innerText") + "-" + dt.xpath("//div[contains(.,'Type')]/following-sibling::div").text)
Vous pouvez utiliser l'attribut text ou innerText comme vous le souhaitez.Essayez ci-dessous le code.
Dimensions-149.9 x 70.4 x 7.8 mm (5.90 x 2.77 x 0.31 in) Type-Dynamic AMOLED capacitive touchscreen, 16M colors
OU
dts = browser.find_elements_by_class_name("dt");
for dt in dts :
if dt.get_attribute("innerText")== "Dimensions":
print(dt.get_attribute("innerText") + "-" + dt.find_element_by_xpath("./following-sibling::div").text)
if dt.get_attribute("innerText") == "Type":
print(dt.get_attribute("innerText") + "-" + dt.find_element_by_xpath("./following-sibling::div").text)
Résultat:
for dt in dts :
if dt.text == "Dimensions":
print(dt.text + "-" + dt.find_element_by_xpath("./following-sibling::div").text)
if dt.text == "Type":
print(dt.text + "-" + dt.find_element_by_xpath("./following-sibling::div").text)
Pour trouver le frère suivant d'un élément, vous pouvez utiliser le sélecteur CSS ou XPath. En utilisant XPath, vous pouvez trouver l'élément frère sans connaître / faire correspondre le localisateur de l'élément précédent. Mais si vous utilisez des sélecteurs CSS, vous devez utiliser le sélecteur pour l'élément frère de l'élément.
Xpath
dts = browser.find_elements_by_class_name("dt")
das = browser.find_elements_by_css_selector(".dt + div")
for i in range(0, len(dts) :
if dt.index(i).text == "Dimensions":
print(dt.indext(i).text + "-" + da.index(i).text)
if dt.index(i).text == "Type":
print(dt.index(i).text + "-" + da.index(i)..text)
Sélecteur CSS
dts = browser.find_elements_by_class_name("dt");
for dt in dts :
if dt.text == "Dimensions":
print(dt.text + "-" + dt.find_element_by_xpath("./following-sibling::div").text)
if dt.text == "Type":
print(dt.text + "-" + dt.find_element_by_xpath("./following-sibling::div").text)
Le sélecteur CSS ne trouvera que les divs qui ont suivi une balise avec la classe dt. Cela fonctionnera sur votre scénario donné parce que tous les divs avec la classe dt suivis d'un div avec une balise da qui contient la valeur.