Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/334.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Selenium C#-找不到元素_C#_Selenium_Selenium Webdriver_Webdriver - Fatal编程技术网

Selenium C#-找不到元素

Selenium C#-找不到元素,c#,selenium,selenium-webdriver,webdriver,C#,Selenium,Selenium Webdriver,Webdriver,起初,我在Selenium IDE firefox插件中创建了一个代码,该插件正在从网站上抓取数据。当然,它在IDE中工作正常 我想从以下内容中提取url: <div class="gs-per-result-labels" url="http://example.com/foo/bar"></div> 我还添加了Sleep,以确保当涉及到抓取值时页面已完全加载。问题是我在FindElement函数上出错,因为driver无法找到元素。我想知道为什么会这样。一切似乎都一

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

我想从以下内容中提取url:

<div class="gs-per-result-labels" url="http://example.com/foo/bar"></div>
我还添加了
Sleep
,以确保当涉及到抓取值时页面已完全加载。问题是我在
FindElement
函数上出错,因为
driver
无法找到元素。我想知道为什么会这样。一切似乎都一样。你有什么建议吗


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

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

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

您的HTML示例不包含任何
div
s。这是故意的吗?有
//div[@gs-per-result-labels']
所以XPath查询XML,该查询
//div[@class='gs-per-result-labels']
将查找具有
class
属性的
div
元素,其值为
'gs-per-result-labels'
。它不会对HTML正文进行纯文本搜索。我不确定您是否理解我的意思。这可以正常工作:但是当我在c#中执行相同的操作时(我甚至使用Selenium IDE自动生成的代码),我无法获得
url
属性。我明白了,您的编辑使它更清晰一些。我只想删除所有的HTML,它似乎与您的问题无关,只会混淆。您是否可以尝试通过.ByClassName(“gs per result labels”)排除XPath查询中的任何问题。我认为10秒钟的睡眠排除了页面没有准备好的可能性。
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");
}
 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");