我有购物网站上的商品清单。有些项目的span style =“..”,有些没有样式。我只需要没有样式的跨度的文本值=“font-size:11px ...所以在这种情况下只有30美元和60美元。
<span class="item_price"> <span style="font-size:11px;color:#d00;text-decoration:line-through">50 USD</span>
30 USD </span>
</div>
<span class="item_price">
60 USD</span>
以下代码返回来自同一类的所有文本值:
IList<IWebElement> prices = driver.FindElements((By.ClassName("item_price")));
foreach (var correctPrice in prices)
{
{ Console.Write(correctPrice.Text); }
答案 0 :(得分:1)
您不能,因为style
的SPAN位于span.item_price
内,因此当您在外部SPAN上执行.Text
时,您也会从内部SPAN获取文本。您可以抓取span.item_price
,然后遍历所有包含的元素,并从原始字符串中删除它们的.Text
。
static string RemoveChildText(IWebElement parent)
{
string text = parent.Text;
foreach (IWebElement e in parent.FindElements(By.CssSelector("*")))
{
text = text.Replace(e.Text, "");
}
return text.Trim();
}
然后将其称为
IReadOnlyCollection<IWebElement> prices = Driver.FindElements(By.CssSelector("span.item_price"));
Console.WriteLine(RemoveChildText(prices.ElementAt(0)));
Console.WriteLine(RemoveChildText(prices.ElementAt(1)));
我在您发布的HTML上对此进行了测试并返回了
30 USD
60 USD
答案 1 :(得分:0)
你可以使用xpath实现这一点,就像这样
IList<IWebElement> prices = driver.FindElements(By.Xpath("//span[@class='item_price' and not(span[contains(@style,'font-size')])]"));
foreach (var correctPrice in prices)
{
{ Console.Write(correctPrice.Text); }
这意味着,您正在寻找没有子跨度的跨度和一些标准