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);