XPath로 CSS 클래스별로 요소를 찾으려면 어떻게 해야 합니까?
제 웹페이지에는div와 함께class이름 지어진Test.
어떻게 하면 찾을 수 있습니까?XPath?
이 선택기는 작동해야 하지만 사용자에게 적합한 마크업으로 교체하면 더 효율적일 것입니다.
//*[contains(@class, 'Test')]
아니면, 우리가 찾는 요소가div:
//div[contains(@class, 'Test')]
하지만 이것은 또한 다음과 같은 경우와 일치하기 때문입니다.class="Testvalue"아니면class="newTest", @댓글에 제공되는 토말락 버전이 더 좋습니다.
//div[contains(concat(' ', @class, ' '), ' Test ')]
정확하게 일치하는지 확인하려면 정규 공간 함수를 사용하여 클래스 이름 주변의 공백 문자를 정리할 수도 있습니다(@Terry에서 언급한 대로).
//div[contains(concat(' ', normalize-space(@class), ' '), ' Test ')]
이 모든 버전에서 *는 문서의 각 요소를 검색하여 주어진 조건을 찾지 않는 한 실제로 일치시키고 싶은 요소 이름으로 가장 잘 대체되어야 합니다.
가장 쉬운 방법은..
//div[@class="Test"]
당신이 찾길 원한다는 가정하에<div class="Test">상술한 바와 같이
XPath를 사용하는 유일한 올바른 방법:
//div[contains(concat(" ", normalize-space(@class), " "), " Test ")]
함수를normalize-space는 선행 및 후행 공백을 제거하고 공백 문자의 시퀀스를 단일 공백으로 바꿉니다.
메모
이러한 Xpath 쿼리가 많이 필요한 경우 CSS 셀렉터를 XPath로 변환하는 라이브러리를 사용할 수 있습니다. CSS 셀렉터는 보통 XPath 쿼리보다 읽기와 쓰기 모두 훨씬 쉽기 때문입니다.예를 들어, 이 경우 선택기를 사용할 수 있습니다.div.Test정확한 결과를 얻기 위해서입니다.
내가 찾을 수 있었던 몇몇 라이브러리:
- 자바스크립트의 경우 : css2xpath & css-to-xpath
- PHP의 경우: CsSSelector 구성 요소
- Python의 경우: cssselect
- C#: css2xpath 다시 로드된 경우
- GO의 경우 : css2xpath
토말락이 오래전에 메더의 대답에 댓글로 제공한 것처럼 이것을 대답으로 제공한 것일 뿐입니다.
//div[contains(concat(' ', @class, ' '), ' Test ')]
XPath에는 다음과 같은 상황을 위해 특별히 설계된 contains-token 기능이 있습니다.
//div[contains-token(@class, 'Test')]
최신 버전의 XPath(3.1)에서만 지원되므로 최신 구현이 필요합니다.
XPath 2.0부터는 토큰화 기능을 사용할 수 있습니다.
//div[tokenize(@class,'\s+')='Test']
여기서는 화이트 스페이스에서 토큰화한 다음 결과 문자열을 '테스트'와 비교합니다.
XPath 3.1 함수 contains-token()의 대안입니다.
그러나 현재(2021-04-30) XPath 2.0 이상을 지원하는 브라우저는 없습니다.
//div[@class[contains(.,'Test')]]
이것이 제가 현재 진행 중인 프로젝트에서 사용하고 있는 것이며, 원활하게 작동합니다.
.서는의을다 Δ Δ Δ Δ Δ Δ Δ Δ Δ Δ Δ Δ 값을 나타냅니다.class의의 div요소.사용하지 않으셔도 됩니다.normalize-space그리고.concat 이름이 있는 를 선택할 . . . . . . div . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .XXXTestXXX 검색 한 수업이 . . 가 한 을 을 가 한 .infobox-header그리고 그 페이지에는 다음과 같은 것이 없습니다.XXinfobox-headerXXXX.
공백이 있는 클래스와 일치합니다.
<div class="hello "></div>
//div[normalize-space(@class)="hello"]
언급URL : https://stackoverflow.com/questions/1604471/how-can-i-find-an-element-by-css-class-with-xpath
'programing' 카테고리의 다른 글
| 자산 카탈로그 색상 집합을 어떻게 사용할 수 있습니까? (0) | 2023.09.10 |
|---|---|
| mariadb가 컨테이너 외부에 있을 수 없습니다. (0) | 2023.09.10 |
| 플라스크로 사용자 에이전트를 받으려면 어떻게 해야 합니까? (0) | 2023.09.10 |
| 개체가 아닌 속성을 가져오는 중 (0) | 2023.09.10 |
| 스프링 JPA :: 형식에서 변환할 수 있는 컨버터를 찾을 수 없습니다. (0) | 2023.09.10 |