Веб-драйвер Selenium - не удалось найти элемент на YouTube

Я пытаюсь получить результаты поиска из предложений YouTube с помощью веб-драйвера Selenium (Java), но получаю следующую ошибку. Пожалуйста помоги.

Ошибка:

Вызвано: org.openqa.selenium.remote.ErrorHandler$UnknownServerException: невозможно найти элемент: {метод:имя класса,селектор:gssb_e}

Информация о сборке: версия: «2.41.0», ревизия: «3192d8a», время: «2014-03-27 17:18:15» Информация о системе: хост: «localhost», ip: «127.0.0.1», os. имя: «Mac OS X», os.arch: «x86_64», os.version: «10.9.3», java.version: «1.7.0_55» Информация о драйвере: driver.version: неизвестно

Код

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, сгенерированный предложениями YouTube:

<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>

person kasukur    schedule 24.05.2014    source источник
comment
Как, черт возьми, вы хотите сделать это на уровне пользовательского интерфейса? Почему вы не можете использовать API YouTube?   -  person Yi Zeng    schedule 24.05.2014
comment
Я пытаюсь сделать что-то похожее на код @ code.google.com/p/selenium /wiki/GettingStarted, который работает, но рекомендация YouTube не работает. Это больше для автоматизации с помощью веб-драйвера.   -  person kasukur    schedule 24.05.2014
comment
YouTube или даже любой сайт на основе Google просто ужасен для автоматизации сайта. Я бы попробовал что-то другое, если все, что вы пытаетесь сделать, это использовать WebDriver для что-то.   -  person Arran    schedule 24.05.2014


Ответы (2)


Попробуйте использовать приведенную ниже логику, чтобы получить результаты поиска на YouTube после загрузки URL.

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"));
}
person Santoshsarma    schedule 26.05.2014
comment
Привет, Сантош, не могли бы вы объяснить, как вам удалось найти элементы с помощью условия селектора CSS By.cssSelector(#results ol#search-results›li h3›a. Я не могу найти CSS, когда проверяю результаты поиска на YouTube. спасибо и ценю вашу помощь. - person kasukur; 27.05.2014
comment
Рассматривая требуемый элемент на странице, нам нужно проверить DOM, после чего нам нужно создать локатор, чтобы найти требуемый элемент (элементы). См. ссылки ниже. w3schools.com/cssref/css_selectors.asp santoshsarmajv.blogspot.in/2013/03/ - person Santoshsarma; 27.05.2014

кажется, что с момента написания учебника Google изменил имена классов элементов. Изменения ниже работали для меня.

WebElement resultsDiv = driver.findElement(By.className("sbsb_a"));
 List allSuggestions = driver.findElements(By.xpath("//li[@class='sbsb_c gsfs']"));
person Jose H. Martinez    schedule 08.04.2015