2016-08-29 2 views
0

Ich bin ein Python-Skript mit Selen bauen, und haben in ein ziemlich verwirrendes Problem geraten.Selenium Python - Finden div mit zwei spezifischen Elementen

Die Website listet Produkte auf, die einen Namen verwenden, der nicht eindeutig ist, und eine Farbe, die ebenfalls nicht eindeutig ist. Die Elemente Farbe und Name haben das gleiche Elternteil.

Mein Skript erhält Benutzereingaben, welches Produkt er für das Skript kaufen möchte und welche Farbe.

Das Problem: Ich kann mich nicht für das Leben herauszufinden, wie das richtige Produkt zu wählen, die beiden Variablen Artikelnamen und productColor verwenden.

DOM:

<div class="inner-article"> 
    <h1> 
    <a class="product-name">Silk Shirt</a> 
    </h1> 
    <p> 
    <a class="product-color">Black</a> 
    </p> 
</div> 

Was ich versucht habe bisher: Offensichtlich genannt das erste Produkt der Auswahl Seidenhemd auf der Seite ist ganz einfach. Ich überlegte, das erste Produkt auszuwählen, dann das Produktelternteil auszuwählen, das Elternelement auszuwählen, dann das zweite Kind der Eltern auszuwählen, zu prüfen, ob es schwarz war und weiterzugehen, aber CSS hat keinen Elternselektor.

Wie würde ich dabei vorgehen?

Antwort

1

Erstellen Sie eine Hauptschleife, die jedes div class="inner-article" Element auswählt. suchen Elemente

In der Schleife, die ein h1 geordnetes Element haben und ein a class=product-name Enkel Element mit Text von „Silk Hemd“ und ein p Kind-Element und ein a class=product-color Enkel Element mit Text von „Black“.

+0

Danke, gute Idee. Es ist sehr wichtig, dass das Skript so schnell wie möglich läuft. Denkst du, dass dies das Skript mehr als ein oder zwei Sekunden verlangsamen wird? – metadog

+0

Nein, das würde ich nicht glauben. (Aber .. wie viele Produkte werden auf einer Seite sein?) –

+0

20 bis 30, so wird es hoffentlich kein Problem sein. Vielen Dank, dass Sie sich die Zeit genommen haben, mir zu helfen! – metadog

0

Vielleicht versuchen Sie die Suche mit Xpath. Der darunter liegende X-Pfad gibt das div-Element zurück, das das gewünschte Produkt und die gewünschte Farbe enthält.

driver.find_element_by_xpath('//div[@class="inner-article"][.//a[@class="product-name"][.="Silk Shirt"]][.//a[@class="product-color"][.="Black"]]') 

Um es wiederverwendbar zu machen:

def select_product(name, color): 
    return driver.find_element_by_xpath('//div[@class="inner-article"][.//a[@class="product-name"][.="{product_name}"]][.//a[@class="product-color"][.="{product_color}"]]'.format(product_name=name, product_color=color)) 
Verwandte Themen