Selenium이 요소의 텍스트를 얻을 수없는 경우의 해결 방법

3259 단어 셀레늄자바

스크래핑에 자주 사용하는 Selenium에서 잘 요소의 텍스트를 얻을 수 없을 때의 대책 방법



빠지기 쉬운 포인트
- 클래스 이름에 공백이 포함되어 있습니다.
- 클래스 이름이 있지만 텍스트를 얻을 수 없습니다.

이번에는, 이 2개의 포인트에 대해서 대처법을 정리합니다.

클래스 이름에 공백이 포함된 경우



자바스크립트라면 공백이 있어도
document.getElementByClassName("class name").innerText;

와 같이, 그대로 클래스명을 기술하는 것만으로,
지정한 클래스명의 텍스트 요소는 간단하게 취득할 수 있습니다.
Selenium으로 대체하는 경우,
WebDriver.findElement(By.cssSelector("div[class='class name']")).getText().toString();

와 같이 By.cssSelector를 사용하여,WebDriver.findElement(By.cssSelector("{タグ名}[class='{クラス名}']")) 로 지정하면 잘 텍스트 요소를 얻을 수 있습니다.

다음에 클래스명은 맞는데 텍스트를 취득할 수 없는 경우



Selenium에서 검색할 수 있는 요소의 태그 유형을 명확하게 확인하지는 않았지만,
주로 div , a , table , tr , tdspan 태그나 b 태그 그 외의 요소를 식별하려면 Xpath로 요소를 직접 지정하거나,
취득하고 싶은 요소의 부모 요소로 div 태그의 요소의 클래스명을 지정해, 취득이 가능하게 됩니다.
<div class="div_class_name">
    <b class="b_class_name">
        <span class="span_class_name">取得したいテキスト</span>
    </b>
</div>

이 경우, div 태그의 클래스명 "div_class_name "를 이용해 텍스트의 취득이 가능합니다.

Xpath를 사용하는 경우,
Chrome 개발 도구를 사용하여 요소에 마우스가 포커스를 둔 상태에서
오른쪽 클릭 → [Copy] → [Copy XPath]
에서 XPath를 얻을 수 있으므로,


WebDriver.findElement(By.xpath("{xpath}")).getText();

로 텍스트를 얻을 수 있습니다.

이상입니다.

그것과 기사의 주제와는 달라지지만,
JavaScript와 Selenium에서는 스크롤 처리가 미묘하게 엇갈리는 곳이 있으므로,
그 점도 주의가 필요하네요.

자바스크립트에서는 잘 취득할 수 있어도 Selenium이라고 가끔 예상대로 동작하지 않을 때가 있으므로,
최악, 자바코드 안에 자바스크립트코드를 내장하여 가동시킬 수도 있으므로,
심지어 알면 괜찮습니다!

좋은 웹페이지 즐겨찾기