-1

제 생각에 따르면 CSS 선택기가 DOM을 통과합니다. CSS 파일에는 요소 위치에 대한 정보가 없기 때문에 왜 cssSelector가 더 빠르다가 XPath (이론적으로)인지는 알 수 없습니다. 이론적으로cssSelector 대 셀레늄에 대한 XPath

:

cssSelector는 XPath를 같이 한 후 짧은 시간 XPath를 가지고는 HTML DOM을 통과해야합니다. XPath CSS는 정방향으로 만 작동하는 반면 DOM 계층에서는 앞뒤로 요소를 검색 할 수 있습니다.

하지만 cssSelector가 HTML DOM을 통과하는 경우 cssSelector를 더 빠르게 만드는 방법도 있습니다.

cssSelector 실제로 내부적으로 어떻게 작동하는지 즉

및 이유 왜 항상 바람직/

는 또한 XPath를 통해 cssSelector를 사용하는 다른 혜택을 공유하십시오 모두 다음 XPath에 의해 사용하는 것이 좋습니다. CSS 선택기가 빨라 나는 '보여 그 지역의 XPath가 cssSelector 다음 더 나은하는

그리고 그 반대

+0

[css-selector와 Xpath의 차이점은 무엇입니까? 더 나은 (성능 및 크로스 브라우저 테스트에 따라)?] (https://stackoverflow.com/questions/16788310/what-is-the-difference-between-css-selector-xpath-which-is-betteraccording- t) – Andersson

+0

@Andersson 그 Q는 꽤 오래되었고 대답은 그다지 정확하지 않습니다. XPath * 및 * CSS 선택기 엔진은 각 브라우저마다 다르므로 어느 쪽에서도 일관성이 없거나 속도가 느려지지 않습니다. XPath는 읽기 어렵습니다. 성능 문제는 아닙니다. – JeffC

답변

1

나는 많은 기사를 읽은 나는 this 및 데이터가 this과 같은 몇 가지를 보았다 약간의 테스트를 마친 후 같은 결론에 도달했습니다. 나는 2016 년 12 월에 elementalselenium.com의 저자 인 Dave Haeffner와 이야기를 나누었고, 꽤 오래 된 이래로 그의 사이트의 퍼프 번호에 대해 물었다. 그는 linked me a presentation (pp18-23 참조)에서 테스트를 업데이트했으며 CSS 선택기는 여전히 빠르지 만 XPath는 몇 가지 구성을 따라 잡고 있습니다.

우리는 그것이 사실이라는 증거를 볼 수 있지만, 의 기술 세부 사항에 대해 누구도 언급하지 않은 이유는입니다. 짐작할 수 있겠지만 페이지 렌더링 속도를 최적화하기 위해 여러 가지 브라우저로 많은 작업이 진행 되었기 때문입니다. CSS 선택기를 빠르게 작동 시키면 페이지가 더 빨리 렌더링되고 브라우저 드라이버는 브라우저의 요소 찾기 기능을 활용하므로 CSS 선택자가 일반적으로 승리합니다. 일부 브라우저에서는 XPath 로케이터 속도가 향상되었지만 CSS 선택기보다 일반적으로 적기 때문에 항상 CSS 선택기보다 뒤떨어져있을 것으로 생각됩니다.

CSS 선택기와 XPath는 모두 DOM을 통과해야하므로 통과하는 엔진의 속도 이외에는 실제 차이가 없습니다. CSS 셀렉터 엔진은 CSS 선택기가 널리 보급 되었기 때문에이 시점에서 XPath 엔진에 맞게 조정 된 것 같습니다.

일반적인 로케이터 전략은 ID 우선, 다른 모든 것에 대한 CSS 선택기입니다. 아무 것도 작동하지 않으면 XPath를 사용합니다. 그것은 사이트마다 다르지만 내 경험상 ID는 아마도 내 위치 표시 자의 ~ 10 % 정도입니다. CSS 선택자는 ~ 80 %이고 마지막 10 %는 XPath입니다. 나는 일반적으로 포함 된 텍스트와 매우 드물게 DOM 순회로 요소를 찾을 필요가있을 때 XPath를 사용합니다. 내 XPath 사용 예는 행 레이블과 관련하여 TABLE에서 요소를 찾아야 할 수 있습니다 (예 : 첫 번째 셀에는 "치즈"가 들어 있고 세 번째 셀에는 가격이 들어있는 테이블 행의 치즈 가격.

쉽게 접근 할 수 있기 때문에 XPath는 SO 및 많은 블로그와 같은 사이트에서 많이 보입니다. 내가해야 할 일은 devtools와 XPath 복사에있는 요소를 오른쪽 클릭하는 것뿐입니다. 문제는 여러 번 발생하여 취성이 떨어지는 XPath를 생성합니다. 손으로 만든 XPath가 더 좋지만 좋은 XPath 또는 CSS 선택기를 수공예로 만드는 데는 시간과 경험이 필요합니다. 많은 사람들이 기꺼이 넣지 않는 시간. 잘못 만들어진 CSS 선택기 또는 XPath로 인해 작업 속도가 느려질 수도 있습니다. 여러 번 요소가 위치 할 수있는 방법이 몇 가지 있으며, 일부는 다른 요소보다 훨씬 효율적입니다 ... 이는 로케이터의 효율과 사용 방법에 달려 있습니다.심하게 형성된 CSS 선택 도구가 자동으로 잘 구성된 XPath보다 빠르지는 않습니다.

+0

감사합니다. @JeffC .. 꽤 좋은 설명이었습니다. 나는 많은 것을 알아야 해. 당장은이 질문을 공개하고 기술 설명을 기다리고 있습니다. 대답을 승인 할거야. 지금 당장 당신을 투표 해. 공유 해줘서 고마워. –

관련 문제