2014-05-24 8 views
1

Selenium webdriver (Java)를 사용하여 YouTube 제안에서 검색 결과를 검색하려고하는데 다음과 같은 오류가 발생합니다. 도와주세요.Selenium webdriver - youtube에서 요소를 찾을 수 없습니다.

오류 :

Caused by: org.openqa.selenium.remote.ErrorHandler$UnknownServerException: Unable to locate element: {"method":"class name","selector":"gssb_e"}

Build info: version: '2.41.0', revision: '3192d8a', time: '2014-03-27 17:18:15' System info: host: 'localhost', ip: '127.0.0.1', os.name: 'Mac OS X', os.arch: 'x86_64', os.version: '10.9.3', java.version: '1.7.0_55' Driver info: driver.version: unknown

코드 유튜브 제안에 의해 생성 된

package test3; 

import java.util.List; 

import org.openqa.selenium.By; 
import org.openqa.selenium.WebDriver; 
import org.openqa.selenium.WebElement; 
import org.openqa.selenium.firefox.FirefoxDriver; 

public class YoutubeSuggest { 

    public static void main(String[] args) { 
       // The Firefox driver supports javascript 
       WebDriver driver = new FirefoxDriver(); 

       // Go to the youtube home page 
       driver.get("http://www.youtube.com/"); 

       // Enter the query string "Ozzy " 
       WebElement query = driver.findElement(By.name("search_query")); 
       query.sendKeys("Ozzy "); 

       // Sleep until the div we want is visible or 10 seconds is over 
       long end = System.currentTimeMillis() + 10000; 
       while (System.currentTimeMillis() < end) { 
        WebElement resultsDiv = driver.findElement(By.className("gssb_e")); 

        // If results have been returned, the results are displayed in a drop down. 
        if (resultsDiv.isDisplayed()) { 
         break; 
        } 
       } 

       // And now list the suggestions 
       List<WebElement> allSuggestions = driver.findElements(By.xpath("//td[@class='gsq_a']")); 

       for (WebElement suggestion : allSuggestions) { 
        System.out.println(suggestion.getText()); 
       } 

       //driver.quit(); 
    } 

} 

HTML :

<table dir="ltr" class="gstl_50 gssb_c" 
    style="width: 585px; top: 39px; position: fixed; text-align: left; left: 230px; display: none;" 
    cellpadding="0" cellspacing="0"> 
    <tbody> 
     <tr> 
      <td class="gssb_f"></td> 
      <td style="width: 100%;" class="gssb_e"><table class="gssb_m" 
        style="width: 100%;" cellpadding="0" cellspacing="0"> 
        <tbody> 
         <tr class=""> 
          <td style="text-align: left;" dir="ltr" class="gssb_a gsfs"><div 
            class="gsq_a"> 
            <table style="width: 100%;" cellpadding="0" cellspacing="0"> 
             <tbody> 
              <tr> 
               <td style="width: 100%;"><span>ozzy<b> 
                  osbourne</b></span></td> 
              </tr> 
             </tbody> 
            </table> 
           </div></td> 
         </tr> 
         <tr class=""> 
          <td style="text-align: left;" dir="ltr" class="gssb_a gsfs"><div 
            class="gsq_a"> 
            <table style="width: 100%;" cellpadding="0" cellspacing="0"> 
             <tbody> 
              <tr> 
               <td style="width: 100%;"><span>ozzy<b> 
                  osbourne crazy train</b></span></td> 
              </tr> 
             </tbody> 
            </table> 
           </div></td> 
         </tr> 
         <tr class=""> 
          <td style="text-align: left;" dir="ltr" class="gssb_a gsfs"><div 
            class="gsq_a"> 
            <table style="width: 100%;" cellpadding="0" cellspacing="0"> 
             <tbody> 
              <tr> 
               <td style="width: 100%;"><span>ozzy<b> 
                  osbourne no more tears</b></span></td> 
              </tr> 
             </tbody> 
            </table> 
           </div></td> 
         </tr> 
         <tr class=""> 
          <td style="text-align: left;" dir="ltr" class="gssb_a gsfs"><div 
            class="gsq_a"> 
            <table style="width: 100%;" cellpadding="0" cellspacing="0"> 
             <tbody> 
              <tr> 
               <td style="width: 100%;"><span>ozzy<b> 
                  osbourne mama i'm coming home</b></span></td> 
              </tr> 
             </tbody> 
            </table> 
           </div></td> 
         </tr> 
         <tr class=""> 
          <td style="text-align: left;" dir="ltr" class="gssb_a gsfs"><div 
            class="gsq_a"> 
            <table style="width: 100%;" cellpadding="0" cellspacing="0"> 
             <tbody> 
              <tr> 
               <td style="width: 100%;"><span>ozzy<b> 
                  osbourne paranoid</b></span></td> 
              </tr> 
             </tbody> 
            </table> 
           </div></td> 
         </tr> 
         <tr class=""> 
          <td style="text-align: left;" dir="ltr" class="gssb_a gsfs"><div 
            class="gsq_a"> 
            <table style="width: 100%;" cellpadding="0" cellspacing="0"> 
             <tbody> 
              <tr> 
               <td style="width: 100%;"><span>ozzy<b> 
                  osbourne justin bieber</b></span></td> 
              </tr> 
             </tbody> 
            </table> 
           </div></td> 
         </tr> 
         <tr class=""> 
          <td style="text-align: left;" dir="ltr" class="gssb_a gsfs"><div 
            class="gsq_a"> 
            <table style="width: 100%;" cellpadding="0" cellspacing="0"> 
             <tbody> 
              <tr> 
               <td style="width: 100%;"><span>ozzy<b> 
                  osbourne mr crowley</b></span></td> 
              </tr> 
             </tbody> 
            </table> 
           </div></td> 
         </tr> 
         <tr class=""> 
          <td style="text-align: left;" dir="ltr" class="gssb_a gsfs"><div 
            class="gsq_a"> 
            <table style="width: 100%;" cellpadding="0" cellspacing="0"> 
             <tbody> 
              <tr> 
               <td style="width: 100%;"><span>ozzy<b> 
                  osbourne bark at the moon</b></span></td> 
              </tr> 
             </tbody> 
            </table> 
           </div></td> 
         </tr> 
         <tr class=""> 
          <td style="text-align: left;" dir="ltr" class="gssb_a gsfs"><div 
            class="gsq_a"> 
            <table style="width: 100%;" cellpadding="0" cellspacing="0"> 
             <tbody> 
              <tr> 
               <td style="width: 100%;"><span>ozzy<b> 
                  osbourne interview</b></span></td> 
              </tr> 
             </tbody> 
            </table> 
           </div></td> 
         </tr> 
         <tr class=""> 
          <td style="text-align: left;" dir="ltr" class="gssb_a gsfs"><div 
            class="gsq_a"> 
            <table style="width: 100%;" cellpadding="0" cellspacing="0"> 
             <tbody> 
              <tr> 
               <td style="width: 100%;"><span>ozzy<b> 
                  osbourne dreamer</b></span></td> 
              </tr> 
             </tbody> 
            </table> 
           </div></td> 
         </tr> 
        </tbody> 
       </table></td> 
     </tr> 
    </tbody> 
</table> 
+2

어떻게 지구에 당신이 UI 수준에서 그렇게 하시겠습니까? [Youtube API] (https://developers.google.com/youtube/getting_started)를 사용할 수없는 이유가 있나요? –

+0

@ https://code.google.com/p/selenium/wiki/GettingStarted 코드와 비슷한 것을하려고합니다. 작동하지만 YouTube 추천은 작동하지 않습니다. 이것은 웹 드라이버를 사용하는 자동화를위한 것입니다. – kasukur

+1

YouTube 또는 Google 기반 사이트 일 수도 있지만 사이트 자동화에 사용하기가 끔찍합니다. 나는 당신이하려고하는 모든 것이 * 뭔가 *를 사용하는 것이라면 뭔가 다른 것을 시도 할 것입니다. – Arran

답변

0

시도 w URL을로드 한 후 YouTube 검색 결과를 얻기위한 로직 아래에 있습니다.

driver.findElement(By.name("search_query")).sendKeys("Selenium WebDriver"+Keys.ENTER); 
List<WebElement> search_result=driver.findElements(By.cssSelector("#results ol#search-results>li h3>a")); 
for(WebElement each_result:search_result) { 
    System.out.println(each_result.getAttribute("title")); 
} 
+0

대단히 감사합니다 Santosh, 매력처럼 일했습니다! – kasukur

+0

안녕하세요 Santhosh, CSS 선택기 조건을 사용하여 요소를 찾을 수있는 방법을 설명해 주시겠습니까? "By.cssSelector ("# results ol # 검색 결과> li h3> a ". 검사 할 때 CSS를 찾을 수 없습니다. 감사합니다. 도움을 주셔서 감사합니다. – kasukur

+0

페이지에서 필수 요소를 고려하여 필요한 요소를 찾기위한 로케이터를 만들어야하는 이후 DOM을 검사해야합니다. 아래 링크 참조 http : //www.w3schools .com/cssref/css_selectors.asp http://santoshsarmajv.blogspot.in/2013/03/replace-xpath-with-css-selector.html – Santoshsarma

0

튜토리얼을 작성한 이후로 Google에서 요소 클래스 이름을 변경 한 것으로 보입니다. 아래 변경 사항이 저에게 효과적이었습니다.

WebElement resultsDiv = driver.findElement(By.className("sbsb_a"));
List allSuggestions = driver.findElements(By.xpath("//li[@class='sbsb_c gsfs']"));
관련 문제