복붙노트

[PYTHON] 셀레늄 python find_element_by_class_name () v 2.2에서 작동을 중지 2.21 - '복합 클래스 이름'을 사용할 수 없습니다.

PYTHON

셀레늄 python find_element_by_class_name () v 2.2에서 작동을 중지 2.21 - '복합 클래스 이름'을 사용할 수 없습니다.

나는 Selenium의 파이썬 라이브러리를 사용하여 Firefox의 HTML 페이지에서 데이터를 긁어 낸다.

서버가 Firefox를 업데이트했기 때문에 Selenium 2.0에서 2.21로 업데이트해야했습니다.

v 2.21에서 find_element_by_class_name ( "grid-cell-inner grid-col-name") 호출은 다음과 함께 실패합니다.

selenium.common.exceptions.WebDriverException: Message: u'Compound class names not permitted'

액세스하려는 요소의 클래스 이름은 grid-cell-inner grid-col-name입니다.

find_element_by_class_name ()에 대한 호출은 v 2.2에서 작동했기 때문에 논리가 정확하고 데이터를 OK로 사용했습니다. 2.21에서 뭔가 바뀌 었습니다.

모든 Selenium 예제는 클래스 이름 foo 등의 간단한 예제를 제공하며 액세스해야하는 이름 유형은 제공하지 않습니다.

Selenium은 왜 grid-cell inner grid-col-name과 같은 이름의 클래스 찾기를 중단 했습니까?

누군가 "복합"클래스 이름을 가진 요소를 찾도록 도와 줄 수 있습니까?

감사.

해결법

  1. ==============================

    1.WebDriver의 문제점은 여전히 ​​발전하고 있다는 것입니다. 많이. 개인적으로 한 명령에서 많은 클래스에 의한 검색을 지원하는 버전을 알지 못하기 때문에 꽤 오래된 버전이었을 것입니다. :)

    WebDriver의 문제점은 여전히 ​​발전하고 있다는 것입니다. 많이. 개인적으로 한 명령에서 많은 클래스에 의한 검색을 지원하는 버전을 알지 못하기 때문에 꽤 오래된 버전이었을 것입니다. :)

    그러나 CSS 선택기로 검색하면 효과가 있습니다.

    find_element_by_css_selector(".grid-cell-inner.grid-col-name");
    

    이 두 가지 표현식이 다른 점 때문에 XPath를이 특정 용도로 사용하는 것은 권장하지 않습니다.

    // * [class = 'grid-cell-inner grid-col-name']

    // * [class = 'grid-col-name grid-cell-inner']

  2. ==============================

    2.".name.name.name"형식으로 CSS 선택기를 사용해야합니다. 원하는 수만큼 지정할 수 있습니다. "."

    ".name.name.name"형식으로 CSS 선택기를 사용해야합니다. 원하는 수만큼 지정할 수 있습니다. "."

    또는 전체 속성을 일치시킬 수 있습니다 (xpath를 사용하여이 작업을 수행 할 수도 있습니다). "[class = 'exact class name here']" XPath - "// [@ class = '정확한 클래스 이름은 여기에']"

    클래스를 동적으로 생성하는 경우 도움이되는 시작과 함께 시작하거나 끝나는 방법 또는 CSS와 xpath 둘 다 포함하는 방법이 있습니다.

  3. ==============================

    3.Selenium은 매우 오랜 시간 동안 복합 클래스 이름을 지원하지 않았습니다.

    Selenium은 매우 오랜 시간 동안 복합 클래스 이름을 지원하지 않았습니다.

    말할 필요도없이 XPath 또는 CSS 셀렉터를 통해 또는 "grid-cell-inner"클래스 이름으로 필터링 한 다음 어떤 요소가 "grid-cell-inner grid-col-name"클래스인지 확인하십시오.

  4. ==============================

    4.또한 시도하십시오 :

    또한 시도하십시오 :

    elements = bot.execute_script("""return document.getElementsByClassName('grid-cell-inner grid-col-name')""")
    
  5. from https://stackoverflow.com/questions/10658907/selenium-python-find-element-by-class-name-stopped-working-from-v-2-2-to-2-21 by cc-by-sa and MIT license