【问题标题】:Selenium webdriver - unable to locate an element on youtubeSelenium webdriver - 无法在 youtube 上找到元素
【发布时间】:2014-07-13 13:23:37
【问题描述】:

我正在尝试使用 Selenium webdriver (Java) 从 YouTube 建议中检索搜索结果,但出现以下错误。请帮忙。

错误:

原因:org.openqa.selenium.remote.ErrorHandler$UnknownServerException:无法定位元素:{"method":"class name","selector":"gssb_e"}

构建信息:版本:'2.41.0',修订:'3192d8a',时间:'2014-03-27 17:18:15' 系统信息:主机:'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.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();
    }

}

youtube 建议生成的 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>

【问题讨论】:

  • 您到底想从 UI 级别如何做到这一点?你有什么理由不能使用Youtube API
  • 我正在尝试执行类似于代码@code.google.com/p/selenium/wiki/GettingStarted 的操作,但该代码有效,但 youtube 建议不起作用。这更适用于使用 Web 驱动程序实现自动化。
  • YouTube 甚至任何基于 Google 的网站都很难用于网站自动化。如果您只想在 something 上使用 WebDriver,我会尝试不同的方法。

标签: java selenium youtube webdriver nosuchelementexception


【解决方案1】:

在加载 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"));
}

【讨论】:

  • 嗨 Santhosh,您能否解释一下您是如何使用 css 选择器条件“By.cssSelector("#results ol#search-results>li h3>a"" 找到元素的。我无法在我检查 youtube 上的搜索结果时找到 css。感谢并感谢您的帮助。
  • 通过考虑页面中所需的元素,我们需要检查 DOM,然后我们需要构造一个定位器来定位所需的元素。请参阅以下链接。 w3schools.com/cssref/css_selectors.aspsantoshsarmajv.blogspot.in/2013/03/…
【解决方案2】:

似乎自编写教程以来,谷歌已经更改了元素类名称。下面的更改对我有用。

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

【讨论】:

    猜你喜欢
    • 2014-05-29
    • 2015-05-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多