2017-03-29 2 views
-2

Ich habe XPathFinden Elemente auf der Webseite mit Selen

/html/body/div[@id='page']/div[@id='page-inner']/div[@id='main-box']/div[@class='in1']/div[@id='content-and-context']/div[@id='content']/div[@class='under-bar']/table[@class='flights']/tbody/tr[@id='flight-932539']/td[2]: 

Aber Flight- Zahl sind Änderungen. Kann ich Elemente mit Teil XPath finden? Ich benutze foreach() und schreibe Daten für jeden Flug.

dies HTML-Code:

HTML Code

+0

Warum erhalten Sie nicht alle Flugdaten gleichzeitig? Sie können auch den Link teilen, von dem Sie Daten abrufen müssen, damit ich sehen kann, wie die Elemente angezeigt werden usw. –

+0

@Rastislav: hat Ihre Frage geändert, um das Bild zu zeigen. –

Antwort

2

Das erste, was zuerst: keine absoluten Pfad verwenden. Selbst die kleinste Änderung in der HTML-Datei macht den Pfad ungültig, besonders in dynamischen Anwendungen. Ihre xpath könnte leicht sein //tr[@id='flight-932539']/td[2]

Was Ihre Frage, Sie für Teil-ID

//tr[contains(@id, 'flight-')]/td[2] 
+0

Nur ein Gedanke, in dem Fall, dass das Element in einem Frame/Iframe oder einem Svg-Element ist, habe ich festgestellt, dass Chrome & Firefox-Treiber seit einiger Zeit keine Elemente basierend auf logischen XPaths erkennen können. Obwohl hier in diesem Fall das OP nicht erwähnt hat, ob sich das Element auf Default Content oder auf einem Frame/iFrame befindet. Danke – DebanjanB

+0

Danke an alle, ich habe noch ein Problem, das ist mein Code: [link] (https://ibb.co/g0fgva) und ich brauche den Text: "Axis Vega3", ich benutze keinen Klassennamen, und Inhalt, weil es sich ändert. Irgendwelche Lösungen? –

+0

@ RastislavSrnánek Die Klasse "Achse" ändert sich auch? Es ist nicht wahrscheinlich. Sie können 'driver.FindElement (By.XPath (" // div [@ class = 'Sponsor axis'] ")) verwenden. GetAttribute (" title ");', um den Text zu erhalten. Übrigens sollten mehr Fragen als neue Fragen gepostet werden, nicht in den Kommentaren. – Guy

0

Als Guy XPath oben erwähnt verwenden können, für gleiche Sie leicht findElements können alle Flugdaten zu finden und dann entsprechend führen Sie Aktionen mit for-Schleife aus.

List<WebElement> WebElements = driver.findElements(By.xpath("//tr[contains(@id, 'flight-')]/td[2]"); 

for(WebElement element : WebElements){ 
    //perform any operation like for click you can use 
    element.getText(); 
} 

Obiges Beispiel ist in JAVA Sie auch in C# gleiche tun.

+0

Ich möchte den Text nehmen. Ich brauche das Datum. –

+0

@ RastislavSrnánek, für den Beantworter ist es schwer zu erraten, wie Ihre Website aussieht und wie Sie die erforderlichen Daten erhalten. Aktualisieren Sie Ihre Frage mit dem entsprechenden 'HTML'-Codebeispiel oder der Seiten-' URL', um eine bessere Antwort zu erhalten. – Andersson

+0

Ok, dann können Sie element verwenden.getText(), aktualisiert das Code-Snippet. Bitte versuche. –

Verwandte Themen