【SeleniumBasic】 웹 페이지의 요소의 존재를 결정하는 방법?

2437 단어 VBASeleniumbasic
이 기사는 Excel+SeleniumBasic+Google Chrome에서 스크라이핑하는 사용자를 위한 기사입니다.

결론: .IsElementPresent를 사용하면 된다.



Selenium의 ChromeDriver에서 사용할 수 있는 '.IsElementPresent' 메서드는
현재의 웹 페이지상에 임의의 요소가 존재하는지의 여부를 Boolean형으로 돌려준다.
if driver.IsElementPresent(myBy.ID("hogehoge")) Then

경위



IsElementPresent를 내가 알기 전에는, 페이지의 요소의 존재의 체크는 FindElementsBy
취득한 오브젝트의 요소수를 체크하면 좋다고 생각했다. 하지만
if driver.FindElementsById("任意のID").Count > 0 Then

라고 기술하면 「NoSuchElement……이하 약어」가 표시되어 VBA 매크로가 중단되어 버렸다.
즉 "그런 요소 없지만?"라는 에러가 Selenium에서 돌아와 VBA의 처리가 멈춰 버린 것 같다.

그래서 에러를 무시하지 않고 정공법으로 웹페이지 요소의 존재 판정하는 방법을 찾기로 했다.
VBA 객체 브라우저를 찾고 있으면 IsElementPresent라는 그와 같은 메소드를 발견했다.


설명문에

Inicates whether a WebElement is present using the given method.

= "지정된 메소드를 사용하여 WebElement가 존재하는지 여부를 나타냅니다. (Google 번역)"

.IsElementPresent 사용법



IsElementPresent 기본.vba
    driver.IsElementPresent(by As By)

「아마 이런 것일 것이다」라고 예상해, 우선 시험해 본다.

test.vba
    Sub test()
        Dim driver As New ChromeDriver
        Dim myBy As New By

        URL = "https://www.google.com/?hl=ja"

        driver.Get URL
        MsgBox driver.IsElementPresent(myBy.ID("hogehoge"))
    End Sub

상기 코드를 실행하면 「NoSuchElement…
즉, 요소의 존재 판정은 이하의 코드로 실장하면 된다.
if driver.IsElementPresent(myBy.ID("hogehoge")) Then

그런데 인수의 By 클래스는 Selenium에 탑재 된 클래스입니다.
By의 인스턴스 myBy를 만들어 myBy 안의 「.id」메소드를 사용해 추출용의 태그나 키워드를 지정하는 구조다.

By 클래스의 메소드들



By 클래스는

Provides a mechanism by which to find elements within a document.

= "문서 내의 요소를 검색하는 메커니즘을 제공합니다. (Google 번역)"이라는 객체입니다.

이 By 클래스, 「.id」외
· .Xpath
·.Class
·.Css
·.Tag
· .linktext
· .partiiallinktext
·.Any
· .name
등이 있다.

앞으로 이들을 필요에 따라 시험해보고 싶다.

IsElementPresent 기사는 이상입니다.

좋은 웹페이지 즐겨찾기