8

I'm trying to parse some html using Selenium. The problem is that it raises error in case the class name contains spaces.

Here is the tag I'm searching for: <p class="p0 ng-binding">text</p>

I've tried these two options:

result.find_element_by_class_name('departure').find_element_by_css_selector('p.p0 ng-binding').text 

result.find_element_by_class_name('departure').find_element_by_class_name('p0 ng-binding').text 

>>> selenium.common.exceptions.InvalidSelectorException: Message: The given selector p0 ng-binding is either invalid or does not result in a WebElement. The following error occurred:
InvalidSelectorError: Compound class names not permitted

Could anybody give me a hint?

Milano
  • 18,048
  • 37
  • 153
  • 353

3 Answers3

14

The p element has two classes: p0 and ng-binding.

Try this selector:

find_element_by_css_selector('p.p0.ng-binding')
eee
  • 3,241
  • 1
  • 17
  • 34
2

This issue Compound class names not permitted occurs because the class name has multiple words you can resolve this by using the below css-selectors

CssSelector("[class*='p0 ng-binding']"); //or
CssSelector("[class='p0 ng-binding']");

Hope this helps you.Kindly get back if you have any queries

Vicky
  • 2,999
  • 2
  • 21
  • 36
2

As @eee pointed out, to check multiple classes in a CSS selector, join them with dots:

p.p0.ng-binding

The problem with that though is that ng-binding class is not a good choice to base your locator on. Instead, check the p0 class only:

p.p0
Community
  • 1
  • 1
alecxe
  • 462,703
  • 120
  • 1,088
  • 1,195