Selenium C#-找不到元素
起初,我在Selenium IDE firefox插件中创建了一个代码,该插件正在从网站上抓取数据。当然,它在IDE中工作正常 我想从以下内容中提取url: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无法找到元素。我想知道为什么会这样。一切似乎都一
<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");