我想通过css选择器找到元素,但我想跳过其中一些,我该怎么做?
driver.FindElements(By.CssSelector("a[href]"))
但我不需要接受具有注销和客户/合同的href
答案 0 :(得分:1)
使用CSS获取元素后,使用LINQ过滤href
。
Using System.Linq;
string[] blackList = new string[] { "logoff, "client",... };
string[] urls = driver
.FindElements(By.CssSelector("a[href]"))
.Select(e => e.GetAttribute("href"))
.Where(url => !blackList.Any(b => url.Contains(b)))
.ToArray();
检查URL区分大小写,因为这是W3C states。您可能想要更改此内容。
答案 1 :(得分:1)
你可能不需要LINQ。您可以使用:not()
伪类,每个值要排除一个值(请注意每个否定中的*=
;我假设子串匹配在这里):
driver.FindElements(By.CssSelector("a[href]:not([href*='logoff']):not([href*='client'])"))
例外情况是,如果您有要排除的动态值列表:您可以使用string.Join()
或循环以编程方式构建选择器,然后将其传递给By.CssSelector()
,或者您可以按照理查德施耐德的回答使用LINQ保持清洁。