Selenium C# - 无法找到元素

时间:2017-01-06 13:46:47

标签: c# selenium selenium-webdriver webdriver

起初我在Selenium IDE firefox插件中创建了一个代码,它正在从网站上抓取数据。当然它在IDE中正常工作。

我想从中抓取网址:

<div class="gs-per-result-labels" url="http://example.com/foo/bar"></div>

由于HTML显示为:

<tr>
    <td>open</td>
    <td>http://example.com</td>
    <td></td>
</tr>

<tr>
    <td>storeAttribute</td>
    <td>//div[@class='gs-per-result-labels']@url</td>
    <td>myValue</td>
</tr>

<tr>
    <td>echo</td>
    <td>${myValue}</td>
    <td></td>
 </tr>

两个命令都正常执行,echo正在给出正确的值。接下来,我将格式更改为C# / NUnit / WebDriver,然后将代码复制到Visual Studio 2015.我添加了FirefoxDriverIWebDriver引用。那就是代码:

private static IWebDriver driver;
static void Main(string[] args)
{
    driver = new FirefoxDriver();

    driver.Navigate().GoToUrl("http://example.com");
    Thread.Sleep(10000);
    string myValue = driver.FindElement(By.XPath("//div[@class='gs-per-result-labels']")).GetAttribute("url");
}

我还添加了Sleep以确保在抓取值时页面已完全加载。问题是我在FindElement函数上遇到错误,因为driver无法找到元素。我想知道为什么会这样。一切似乎都是一样的。你有什么提示吗?

我认为值得一说:我想要抓取的内容是由php或javascript生成的(这是google搜索结果在“示例”页面上不是google)

1 个答案:

答案 0 :(得分:0)

最好的方法是检查Xpath是否绝对正确。您可以随时使用Firebug,或者如果您想以编程方式执行,下面的行应该有帮助

 List<WebElement> existList=driver.FindElement(By.XPath("//div[@class='gs-per-result-labels']"));
 if(existList.size()>0){
    //SOPL("element present");
 }

我建议你使用显式等待

 WebDriverWait wait=new WebDriverWait (driver,60);
 wait.until(ExpectedConditions.visibilityOfElementLocated(By.XPath("//div[@class='gs-per-result-labels']")));
  string myValue = driver.FindElement(By.XPath("//div[@class='gs-per-result-labels']")).GetAttribute("url");