【发布时间】: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