Ich habe eine HTML-Tabelle, und ich möchte das td
Element in tbody
basierend auf dem Text finden und wenn es keine bestimmte Klasse enthält. Es sollte alles in thead
ignorieren, auch wenn der Text vorhanden ist. HierWie findet man Elemente basierend auf Text und Klasse mit Selen?
...
<div id="mytable">
<div>
<table>
<thead>
<tr>....</tr>
...
</thead>
<tbody>
<tr>
<td class="inactive">3</td>
<td>4</td>
</tr>
</tbody>
</table>
</div>
</div>
...
ist der Code:
def do_click(user_input):
browser = webdriver.Firefox()
browser.get(url)
mytable_div = browser.find_element_by_id("mytable")
element = mytable_div.find_element_by_xpath("//div/table/tbody/td[contains(text()='%s')]" % user_input)
if element:
element.click()
Also, wenn die user_input = 3
, das Tabellenelement soll nicht angeklickt werden, da er die Klasse hat inactive
obwohl der Text vorhanden ist.
Wenn die user_input = 4
, dann sollte das Tabellenelement geklickt werden, da es keine inaktive Klasse hat und der Text vorhanden ist.
Momentan funktioniert der Code nicht, weil mein XPath-Ausdruck ungültig ist, aber ich bin mir nicht sicher, wie der korrekte Weg für die Klasse und den Text aussehen würde.
Wie verhindere ich das Klicken, wenn das 'td' Element die Klasse 'inaktiv' hat? – warchest
@warchest ah, natürlich, aktualisiert. – alecxe
Danke, aber aus irgendeinem Grund gibt der xpath einen Fehler zurück: 'Nachricht: kein solches Element: Element kann nicht gefunden werden: {" method ":" xpath "," selector ":" // div/table/tbody/td [enthält (., '4')] [not (contains (@class, 'inactive'))] "}'. ** Wie auch immer **, ich finde und klicke direkt mit '// div/table/tbody/tr [1]/td [2]'. Es scheint, dass das Element definitiv da ist, aber der XPath nimmt es nicht auf. – warchest