diff --git a/ScrapySharp/Html/By.cs b/ScrapySharp/Html/By.cs
index d6a29e7..d6998c6 100644
--- a/ScrapySharp/Html/By.cs
+++ b/ScrapySharp/Html/By.cs
@@ -40,5 +40,10 @@ public static By Class(string query, StringComparison comparisonType = StringCom
{
return new By(query, ElementSearchKind.Class, comparisonType);
}
+
+ public static By Title(string query, StringComparison comparisonType = StringComparison.CurrentCulture)
+ {
+ return new By(query, ElementSearchKind.Title, comparisonType);
+ }
}
}
\ No newline at end of file
diff --git a/ScrapySharp/Html/ElementFinder.cs b/ScrapySharp/Html/ElementFinder.cs
index 441e6f4..8b6ae3e 100644
--- a/ScrapySharp/Html/ElementFinder.cs
+++ b/ScrapySharp/Html/ElementFinder.cs
@@ -27,14 +27,14 @@ public IEnumerable FindElements()
switch (searchKind)
{
case ElementSearchKind.Text:
- return html.Descendants(tagName).Where(n => string.IsNullOrEmpty(n.InnerText) ? string.IsNullOrEmpty(query) : n.InnerText.Equals(query, comparisonType));
+ return html.Descendants(tagName).Where(n => string.IsNullOrEmpty(n.InnerText) ? string.IsNullOrEmpty(query) : n.InnerText.Trim().Equals(query, comparisonType));
case ElementSearchKind.Id:
return from n in html.Descendants(tagName)
- where string.IsNullOrEmpty(n.Id) ? string.IsNullOrEmpty(query) : n.Id.Equals(query, comparisonType)
+ where string.IsNullOrEmpty(n.Id) ? string.IsNullOrEmpty(query) : n.Id.Trim().Equals(query, comparisonType)
select n;
case ElementSearchKind.Name:
return from n in html.Descendants(tagName)
- let name = n.GetAttributeValue("name", string.Empty)
+ let name = n.GetAttributeValue("name", string.Empty).Trim()
where string.IsNullOrEmpty(name) ? string.IsNullOrEmpty(query) : name.Equals(query, comparisonType)
select n;
case ElementSearchKind.Class:
@@ -43,6 +43,12 @@ where string.IsNullOrEmpty(name) ? string.IsNullOrEmpty(query) : name.Equals(que
let names = @class.Split(new []{' '}, StringSplitOptions.RemoveEmptyEntries)
where names.Contains(query)
select n;
+ case ElementSearchKind.Title:
+ return from n in html.Descendants(tagName)
+ let title = n.GetAttributeValue("title", string.Empty)
+ let fixedTitle = title.Replace(" ", " ").Trim()
+ where string.IsNullOrEmpty(fixedTitle) ? string.IsNullOrEmpty(query) : fixedTitle.Equals(query, comparisonType)
+ select n;
default:
return new List();
}
diff --git a/ScrapySharp/Html/ElementSearchKind.cs b/ScrapySharp/Html/ElementSearchKind.cs
index a515bcf..5337d4d 100644
--- a/ScrapySharp/Html/ElementSearchKind.cs
+++ b/ScrapySharp/Html/ElementSearchKind.cs
@@ -5,6 +5,7 @@ public enum ElementSearchKind
Text,
Id,
Name,
- Class
+ Class,
+ Title
}
}
\ No newline at end of file
diff --git a/ScrapySharp/Html/Forms/HyperLink.cs b/ScrapySharp/Html/Forms/HyperLink.cs
index 6922ddb..1c3309d 100644
--- a/ScrapySharp/Html/Forms/HyperLink.cs
+++ b/ScrapySharp/Html/Forms/HyperLink.cs
@@ -21,6 +21,16 @@ public string Text
get { return node.InnerText; }
}
+ public string Href
+ {
+ get
+ {
+ var ret = string.Empty;
+ if (node.HasAttributes)
+ ret = node.Attributes["href"].Value;
+ return ret;
+ }
+ }
public WebPage Click()
{
var href = node.GetAttributeValue("href", string.Empty);