Question: I'm attempting to find a web element using XPath in `Selenium` for Python. The web element should contain the text *"Chocolate"* but not include *"Dark"*.

I've tried this syntax but not gotten it to work (be mindful of parantheses):

```
choco = driver.find_element_by_xpath("//*[text()[contains(., 'Chocolate')] and not[[contains(., 'Dark')]]]")

```

Here is the same code using line breaks and concatenation for readability:

```
choco = driver.find_element_by_xpath((
                                    "//*[text()[contains(., 'Chocolate')]" + 
                                    "and not[[contains(., 'Dark')]]]"
                                    ))

```

Answer: 
Please try following `XPath` and let me know if any errors occurs:

```
//*[contains(text(), "Chocolate")][not(contains(text(), "Dark"))]

```
Here is the syntax with using just one set of square brackets.

For elements containing the word 'Chocolate' but not 'Dark', use:

```
//*[contains(text(), 'Chocolate') and not(contains(text(), 'Dark'))]

```

For just the text of the elements, use:

```
//text()[contains(., 'Chocolate') and not(contains(., 'Dark'))]

```

Given the following XML:

```
<doc>
  <e>Dark Chocolate</e>
  <e>Chocolate</e>
</doc>

```

The first expression results in:

```
> xpath -e "//*[contains(text(), 'Chocolate') and not(contains(text(), 'Dark'))]" test.xml 
<e>Chocolate</e>

```

The second expression results in:

```
> xpath -e "//text()[contains(., 'Chocolate') and not(contains(., 'Dark'))]" test.xml 
Chocolate

```