mirror of https://github.com/Jackett/Jackett
indexers: ensure the correct use of disposable parsed documents (#14743)
This commit is contained in:
parent
21d948906c
commit
f81a7e3d59
|
@ -140,7 +140,7 @@ namespace Jackett.Common.Indexers.Abstract
|
|||
await ConfigureIfOK(response.Cookies, response.ContentString != null && response.ContentString.Contains("logout.php"), () =>
|
||||
{
|
||||
var loginResultParser = new HtmlParser();
|
||||
var loginResultDocument = loginResultParser.ParseDocument(response.ContentString);
|
||||
using var loginResultDocument = loginResultParser.ParseDocument(response.ContentString);
|
||||
var loginform = loginResultDocument.QuerySelector("#loginform");
|
||||
if (loginform == null)
|
||||
throw new ExceptionWithConfigData(response.ContentString, configData);
|
||||
|
|
|
@ -142,7 +142,7 @@ namespace Jackett.Common.Indexers
|
|||
);
|
||||
|
||||
var parser = new HtmlParser();
|
||||
var document = await parser.ParseDocumentAsync(result.ContentString);
|
||||
using var document = await parser.ParseDocumentAsync(result.ContentString);
|
||||
|
||||
await ConfigureIfOK(result.Cookies, IsAuthorized(result), () =>
|
||||
{
|
||||
|
@ -185,7 +185,7 @@ namespace Jackett.Common.Indexers
|
|||
try
|
||||
{
|
||||
var parser = new HtmlParser();
|
||||
var document = await parser.ParseDocumentAsync(result.ContentString);
|
||||
using var document = await parser.ParseDocumentAsync(result.ContentString);
|
||||
|
||||
foreach (var linkNode in document.QuerySelectorAll(ReleaseLinksSelector))
|
||||
{
|
||||
|
@ -222,7 +222,7 @@ namespace Jackett.Common.Indexers
|
|||
try
|
||||
{
|
||||
var parser = new HtmlParser();
|
||||
var document = await parser.ParseDocumentAsync(result.ContentString);
|
||||
using var document = await parser.ParseDocumentAsync(result.ContentString);
|
||||
var content = document.GetElementById(ContentId);
|
||||
|
||||
var date = GetDateFromShowPage(url, content);
|
||||
|
@ -553,7 +553,7 @@ namespace Jackett.Common.Indexers
|
|||
try
|
||||
{
|
||||
var parser = new HtmlParser();
|
||||
var document = await parser.ParseDocumentAsync(response.ContentString);
|
||||
using var document = await parser.ParseDocumentAsync(response.ContentString);
|
||||
|
||||
foreach (var linkNode in document.QuerySelectorAll(searchLinkSelector))
|
||||
{
|
||||
|
|
|
@ -212,7 +212,7 @@ namespace Jackett.Common.Indexers
|
|||
try
|
||||
{
|
||||
var resultParser = new HtmlParser();
|
||||
var resultDocument = resultParser.ParseDocument(response);
|
||||
using var resultDocument = resultParser.ParseDocument(response);
|
||||
IEnumerable<IElement> rows = resultDocument.QuerySelectorAll("div#content table > tbody > tr");
|
||||
|
||||
var releases = new List<ReleaseInfo>();
|
||||
|
|
|
@ -103,7 +103,7 @@ namespace Jackett.Common.Indexers
|
|||
await ConfigureIfOK(result.Cookies, result.ContentString != null && result.ContentString.Contains("logout.php"), () =>
|
||||
{
|
||||
var parser = new HtmlParser();
|
||||
var dom = parser.ParseDocument(result.ContentString);
|
||||
using var dom = parser.ParseDocument(result.ContentString);
|
||||
var errorMessage = dom.QuerySelector(".ui-state-error").Text().Trim();
|
||||
throw new ExceptionWithConfigData(errorMessage, configData);
|
||||
});
|
||||
|
@ -152,7 +152,7 @@ namespace Jackett.Common.Indexers
|
|||
try
|
||||
{
|
||||
var parser = new HtmlParser();
|
||||
var dom = parser.ParseDocument(results);
|
||||
using var dom = parser.ParseDocument(results);
|
||||
|
||||
var rows = dom.QuerySelectorAll("table tr");
|
||||
foreach (var (row, index) in rows.Skip(1).Select((v, i) => (v, i)))
|
||||
|
|
|
@ -207,7 +207,7 @@ namespace Jackett.Common.Indexers
|
|||
var response = await RequestWithCookiesAsync(link.ToString());
|
||||
|
||||
var parser = new HtmlParser();
|
||||
var dom = parser.ParseDocument(response.ContentString);
|
||||
using var dom = parser.ParseDocument(response.ContentString);
|
||||
|
||||
var hash = dom.QuerySelector("td:contains(\"Info Hash:\") ~ td")?.TextContent.Trim();
|
||||
if (hash == null)
|
||||
|
@ -228,7 +228,7 @@ namespace Jackett.Common.Indexers
|
|||
{
|
||||
var releases = new List<ReleaseInfo>();
|
||||
|
||||
var dom = ParseHtmlDocument(response.ContentString);
|
||||
using var dom = ParseHtmlDocument(response.ContentString);
|
||||
|
||||
var rows = dom.QuerySelectorAll("div.post:has(div[class=\"postTitle\"])");
|
||||
foreach (var row in rows)
|
||||
|
|
|
@ -289,7 +289,7 @@ namespace Jackett.Common.Indexers
|
|||
{
|
||||
const string rowsSelector = "table.torrent_table > tbody > tr:not(tr.colhead)";
|
||||
var searchResultParser = new HtmlParser();
|
||||
var searchResultDocument = searchResultParser.ParseDocument(results.ContentString);
|
||||
using var searchResultDocument = searchResultParser.ParseDocument(results.ContentString);
|
||||
var rows = searchResultDocument.QuerySelectorAll(rowsSelector);
|
||||
ICollection<int> groupCategory = null;
|
||||
string groupTitle = null;
|
||||
|
@ -457,7 +457,7 @@ namespace Jackett.Common.Indexers
|
|||
{
|
||||
const string rowsSelector = "table.torrent_table > tbody > tr:not(tr.colhead)";
|
||||
var searchResultParser = new HtmlParser();
|
||||
var searchResultDocument = searchResultParser.ParseDocument(results.ContentString);
|
||||
using var searchResultDocument = searchResultParser.ParseDocument(results.ContentString);
|
||||
var rows = searchResultDocument.QuerySelectorAll(rowsSelector);
|
||||
foreach (var row in rows)
|
||||
try
|
||||
|
|
|
@ -117,7 +117,7 @@ namespace Jackett.Common.Indexers
|
|||
};
|
||||
|
||||
var htmlParser = new HtmlParser();
|
||||
var dom = htmlParser.ParseDocument(loginForm.ContentString);
|
||||
using var dom = htmlParser.ParseDocument(loginForm.ContentString);
|
||||
|
||||
var loginKey = dom.QuerySelector("input[name=\"loginKey\"]");
|
||||
if (loginKey != null)
|
||||
|
@ -129,7 +129,7 @@ namespace Jackett.Common.Indexers
|
|||
|
||||
await ConfigureIfOK(response.Cookies, response.ContentString != null && !response.ContentString.Contains("loginForm"), () =>
|
||||
{
|
||||
var document = htmlParser.ParseDocument(response.ContentString);
|
||||
using var document = htmlParser.ParseDocument(response.ContentString);
|
||||
var errorMessage = document.QuerySelector("#loginError, .error")?.Text().Trim();
|
||||
|
||||
throw new ExceptionWithConfigData(errorMessage ?? "Login failed.", configData);
|
||||
|
@ -158,7 +158,7 @@ namespace Jackett.Common.Indexers
|
|||
try
|
||||
{
|
||||
var parser = new HtmlParser();
|
||||
var dom = parser.ParseDocument(response.ContentString);
|
||||
using var dom = parser.ParseDocument(response.ContentString);
|
||||
var rows = dom.QuerySelectorAll(".torrents tr.torrent, .torrents tr.torrent_alt");
|
||||
ICollection<int> currentCategories = new List<int> { TorznabCatType.TVAnime.ID };
|
||||
|
||||
|
@ -318,7 +318,7 @@ namespace Jackett.Common.Indexers
|
|||
var downloadPage = await RequestWithCookiesAsync(link.ToString());
|
||||
|
||||
var parser = new HtmlParser();
|
||||
var dom = parser.ParseDocument(downloadPage.ContentString);
|
||||
using var dom = parser.ParseDocument(downloadPage.ContentString);
|
||||
|
||||
var downloadLink = dom.QuerySelector(".download_link")?.GetAttribute("href");
|
||||
|
||||
|
|
|
@ -143,7 +143,7 @@ namespace Jackett.Common.Indexers
|
|||
foreach (var result in results)
|
||||
try
|
||||
{
|
||||
var dom = parser.ParseDocument(result.ContentString);
|
||||
using var dom = parser.ParseDocument(result.ContentString);
|
||||
|
||||
var tableBody = dom.QuerySelector("#torrents-index-table > #torrents-index-table-body");
|
||||
if (tableBody == null) // No results, so skip this search
|
||||
|
|
|
@ -180,7 +180,7 @@ namespace Jackett.Common.Indexers
|
|||
{
|
||||
const string rowsSelector = "table.torrent_table > tbody > tr:not(tr.colhead)";
|
||||
var searchResultParser = new HtmlParser();
|
||||
var searchResultDocument = searchResultParser.ParseDocument(results.ContentString);
|
||||
using var searchResultDocument = searchResultParser.ParseDocument(results.ContentString);
|
||||
var rows = searchResultDocument.QuerySelectorAll(rowsSelector);
|
||||
string groupTitle = null;
|
||||
string groupYearStr = null;
|
||||
|
|
|
@ -528,7 +528,7 @@ namespace Jackett.Common.Indexers
|
|||
return true; // no error
|
||||
|
||||
var ResultParser = new HtmlParser();
|
||||
var ResultDocument = ResultParser.ParseDocument(loginResult.ContentString);
|
||||
using var ResultDocument = ResultParser.ParseDocument(loginResult.ContentString);
|
||||
foreach (var error in errorBlocks)
|
||||
{
|
||||
var selection = ResultDocument.QuerySelector(error.Selector);
|
||||
|
@ -877,7 +877,7 @@ namespace Jackett.Common.Indexers
|
|||
if (Login.Test.Selector != null)
|
||||
{
|
||||
var testResultParser = new HtmlParser();
|
||||
var testResultDocument = testResultParser.ParseDocument(testResult.ContentString);
|
||||
using var testResultDocument = testResultParser.ParseDocument(testResult.ContentString);
|
||||
var selection = testResultDocument.QuerySelectorAll(Login.Test.Selector);
|
||||
if (selection.Length == 0)
|
||||
{
|
||||
|
@ -923,7 +923,7 @@ namespace Jackett.Common.Indexers
|
|||
if (Definition.Login.Test.Selector != null && (contentType?.Contains("text/html") ?? true))
|
||||
{
|
||||
var parser = new HtmlParser();
|
||||
var document = parser.ParseDocument(response.ContentString);
|
||||
using var document = parser.ParseDocument(response.ContentString);
|
||||
|
||||
var selection = document.QuerySelectorAll(Definition.Login.Test.Selector);
|
||||
|
||||
|
@ -1969,7 +1969,7 @@ namespace Jackett.Common.Indexers
|
|||
var parser = new HtmlParser();
|
||||
|
||||
var results = response.ContentString;
|
||||
var resultDocument = parser.ParseDocument(results);
|
||||
using var resultDocument = parser.ParseDocument(results);
|
||||
|
||||
var element = resultDocument.QuerySelector(selectorText);
|
||||
if (element == null)
|
||||
|
|
|
@ -141,7 +141,7 @@ namespace Jackett.Common.Indexers
|
|||
|
||||
try
|
||||
{
|
||||
var dom = await parser.ParseDocumentAsync(results.ContentString);
|
||||
using var dom = await parser.ParseDocumentAsync(results.ContentString);
|
||||
|
||||
var downloadLink = link.Query.Contains("type=4k")
|
||||
? dom.QuerySelector("ul.links a:contains('Bittorrent 4K')")
|
||||
|
@ -167,8 +167,10 @@ namespace Jackett.Common.Indexers
|
|||
protectedLink = GetAbsoluteUrl(protectedLink);
|
||||
|
||||
results = await RequestWithCookiesAsync(protectedLink);
|
||||
dom = parser.ParseDocument(results.ContentString);
|
||||
var magnetUrl = dom.QuerySelector("a[href^=magnet]").GetAttribute("href");
|
||||
|
||||
using var document = parser.ParseDocument(results.ContentString);
|
||||
var magnetUrl = document.QuerySelector("a[href^=magnet]").GetAttribute("href");
|
||||
|
||||
return await base.Download(new Uri(magnetUrl));
|
||||
}
|
||||
catch (Exception ex)
|
||||
|
@ -186,7 +188,7 @@ namespace Jackett.Common.Indexers
|
|||
try
|
||||
{
|
||||
var parser = new HtmlParser();
|
||||
var dom = parser.ParseDocument(response.ContentString);
|
||||
using var dom = parser.ParseDocument(response.ContentString);
|
||||
|
||||
var rows = dom.QuerySelectorAll("article:has(a.absolute):has(img.rounded)");
|
||||
|
||||
|
|
|
@ -167,7 +167,7 @@ namespace Jackett.Common.Indexers
|
|||
var result = await RequestWithCookiesAsync(downloadUrl);
|
||||
if (result.Status != HttpStatusCode.OK)
|
||||
throw new ExceptionWithConfigData(result.ContentString, configData);
|
||||
var dom = parser.ParseDocument(result.ContentString);
|
||||
using var dom = parser.ParseDocument(result.ContentString);
|
||||
|
||||
//var info = dom.QuerySelectorAll("div.descargar > div.card > div.card-body").First();
|
||||
//var title = info.QuerySelector("h2.descargarTitulo").TextContent;
|
||||
|
@ -192,7 +192,7 @@ namespace Jackett.Common.Indexers
|
|||
try
|
||||
{
|
||||
var searchResultParser = new HtmlParser();
|
||||
var doc = searchResultParser.ParseDocument(result.ContentString);
|
||||
using var doc = searchResultParser.ParseDocument(result.ContentString);
|
||||
|
||||
var rows = doc.QuerySelector("div.seccion#ultimos_torrents > div.card > div.card-body > div");
|
||||
|
||||
|
@ -284,7 +284,7 @@ namespace Jackett.Common.Indexers
|
|||
try
|
||||
{
|
||||
var searchResultParser = new HtmlParser();
|
||||
var doc = searchResultParser.ParseDocument(result.ContentString);
|
||||
using var doc = searchResultParser.ParseDocument(result.ContentString);
|
||||
|
||||
var rows = doc.QuerySelectorAll("div.seccion#buscador > div.card > div.card-body > p");
|
||||
|
||||
|
@ -375,7 +375,7 @@ namespace Jackett.Common.Indexers
|
|||
throw new ExceptionWithConfigData(result.ContentString, configData);
|
||||
|
||||
var searchResultParser = new HtmlParser();
|
||||
var doc = searchResultParser.ParseDocument(result.ContentString);
|
||||
using var doc = searchResultParser.ParseDocument(result.ContentString);
|
||||
|
||||
var data = doc.QuerySelector("div.descargar > div.card > div.card-body");
|
||||
|
||||
|
@ -404,7 +404,7 @@ namespace Jackett.Common.Indexers
|
|||
throw new ExceptionWithConfigData(result.ContentString, configData);
|
||||
|
||||
var searchResultParser = new HtmlParser();
|
||||
var doc = searchResultParser.ParseDocument(result.ContentString);
|
||||
using var doc = searchResultParser.ParseDocument(result.ContentString);
|
||||
|
||||
var data = doc.QuerySelector("div.descargar > div.card > div.card-body");
|
||||
|
||||
|
@ -457,7 +457,7 @@ namespace Jackett.Common.Indexers
|
|||
throw new ExceptionWithConfigData(result.ContentString, configData);
|
||||
|
||||
var searchResultParser = new HtmlParser();
|
||||
var doc = searchResultParser.ParseDocument(result.ContentString);
|
||||
using var doc = searchResultParser.ParseDocument(result.ContentString);
|
||||
|
||||
// parse tags in title, we need to put the year after the real title (before the tags)
|
||||
// Harry Potter And The Deathly Hallows: Part 1 [subs. Integrados]
|
||||
|
|
|
@ -133,7 +133,7 @@ namespace Jackett.Common.Indexers
|
|||
{
|
||||
var json = JsonConvert.DeserializeObject<dynamic>(result.ContentString);
|
||||
var parser = new HtmlParser();
|
||||
var doc = parser.ParseDocument((string)json["contenido"]);
|
||||
using var doc = parser.ParseDocument((string)json["contenido"]);
|
||||
|
||||
var rows = doc.QuerySelectorAll("div.span2");
|
||||
foreach (var row in rows)
|
||||
|
@ -147,7 +147,7 @@ namespace Jackett.Common.Indexers
|
|||
var qLink = row.QuerySelector("a");
|
||||
var details = new Uri(qLink.GetAttribute("href"));
|
||||
|
||||
var qTooltip = parser.ParseDocument(qLink.GetAttribute("data-content"));
|
||||
using var qTooltip = parser.ParseDocument(qLink.GetAttribute("data-content"));
|
||||
// we get the language from the last class tag => class="pull-right sprite idioma_5"
|
||||
var languageId = qTooltip.QuerySelector("div.pull-right").GetAttribute("class").Split('_')[1];
|
||||
title += $" [{_languages[languageId]}] [epub]";
|
||||
|
@ -195,7 +195,7 @@ namespace Jackett.Common.Indexers
|
|||
try
|
||||
{
|
||||
var parser = new HtmlParser();
|
||||
var doc = parser.ParseDocument(result.ContentString);
|
||||
using var doc = parser.ParseDocument(result.ContentString);
|
||||
var magnetLink = doc.QuerySelector("a[id=en_desc]").GetAttribute("href");
|
||||
return Encoding.UTF8.GetBytes(magnetLink);
|
||||
}
|
||||
|
|
|
@ -99,7 +99,7 @@ namespace Jackett.Common.Indexers
|
|||
await ConfigureIfOK(result.Cookies, result.ContentString?.Contains("logout.php") == true, () =>
|
||||
{
|
||||
var parser = new HtmlParser();
|
||||
var dom = parser.ParseDocument(result.ContentString);
|
||||
using var dom = parser.ParseDocument(result.ContentString);
|
||||
var errorMessage = dom.QuerySelector("td.mf_content").TextContent;
|
||||
throw new ExceptionWithConfigData(errorMessage, configData);
|
||||
});
|
||||
|
@ -197,7 +197,7 @@ namespace Jackett.Common.Indexers
|
|||
try
|
||||
{
|
||||
var parser = new HtmlParser();
|
||||
var dom = parser.ParseDocument(results.ContentString);
|
||||
using var dom = parser.ParseDocument(results.ContentString);
|
||||
|
||||
var rows = dom.QuerySelectorAll("table.mainframe table[cellpadding=\"2\"] > tbody > tr:has(td.row3)");
|
||||
foreach (var row in rows)
|
||||
|
|
|
@ -247,7 +247,7 @@ namespace Jackett.Common.Indexers
|
|||
var RowsSelector = ".torrent_table > tbody > tr";
|
||||
|
||||
var SearchResultParser = new HtmlParser();
|
||||
var SearchResultDocument = SearchResultParser.ParseDocument(results.ContentString);
|
||||
using var SearchResultDocument = SearchResultParser.ParseDocument(results.ContentString);
|
||||
var Rows = SearchResultDocument.QuerySelectorAll(RowsSelector);
|
||||
|
||||
var stickyGroup = false;
|
||||
|
|
|
@ -111,7 +111,7 @@ namespace Jackett.Common.Indexers
|
|||
await ConfigureIfOK(response.Cookies, response.ContentString?.Contains("logout.php") == true || response.ContentString?.Contains("Rank: Parked") == true, () =>
|
||||
{
|
||||
var parser = new HtmlParser();
|
||||
var dom = parser.ParseDocument(response.ContentString);
|
||||
using var dom = parser.ParseDocument(response.ContentString);
|
||||
var errorMessages = dom
|
||||
.QuerySelectorAll("table.lista td.lista span[style*=\"#FF0000\"], table.lista td.header:contains(\"login attempts\")")
|
||||
.Select(r => r.TextContent.Trim())
|
||||
|
@ -149,7 +149,7 @@ namespace Jackett.Common.Indexers
|
|||
try
|
||||
{
|
||||
var resultParser = new HtmlParser();
|
||||
var searchResultDocument = resultParser.ParseDocument(response.ContentString);
|
||||
using var searchResultDocument = resultParser.ParseDocument(response.ContentString);
|
||||
var rows = searchResultDocument.QuerySelectorAll("table.lista > tbody > tr");
|
||||
|
||||
foreach (var row in rows)
|
||||
|
|
|
@ -136,7 +136,7 @@ namespace Jackett.Common.Indexers
|
|||
result.Cookies, result.ContentString?.Contains("If your browser doesn't have javascript enabled") == true, () =>
|
||||
{
|
||||
var parser = new HtmlParser();
|
||||
var dom = parser.ParseDocument(result.ContentString);
|
||||
using var dom = parser.ParseDocument(result.ContentString);
|
||||
|
||||
var errorMessage = dom.QuerySelector("div > font[color=\"#FF0000\"]")?.TextContent.Trim();
|
||||
|
||||
|
@ -167,7 +167,7 @@ namespace Jackett.Common.Indexers
|
|||
try
|
||||
{
|
||||
var parser = new HtmlParser();
|
||||
var dom = parser.ParseDocument(results.ContentString);
|
||||
using var dom = parser.ParseDocument(results.ContentString);
|
||||
|
||||
var userInfo = dom.QuerySelector("table.navus tr");
|
||||
var userRank = userInfo.Children[1].TextContent.Replace("Rank:", string.Empty).Trim();
|
||||
|
|
|
@ -308,7 +308,7 @@ namespace Jackett.Common.Indexers
|
|||
try
|
||||
{
|
||||
var parser = new HtmlParser();
|
||||
var doc = parser.ParseDocument(results);
|
||||
using var doc = parser.ParseDocument(results);
|
||||
|
||||
var rows = doc.QuerySelectorAll("table[id=\"torrents\"] > tbody > tr");
|
||||
foreach (var row in rows)
|
||||
|
|
|
@ -165,7 +165,7 @@ namespace Jackett.Common.Indexers
|
|||
await ConfigureIfOK(response.Cookies, response.ContentString.Contains("logout.php"), () =>
|
||||
{
|
||||
var parser = new HtmlParser();
|
||||
var document = parser.ParseDocument(response.ContentString);
|
||||
using var document = parser.ParseDocument(response.ContentString);
|
||||
var errorMessage = document.QuerySelector("#main table td:contains(\"ERROR\")")?.TextContent.Trim();
|
||||
|
||||
throw new ExceptionWithConfigData(errorMessage ?? "Login failed.", configData);
|
||||
|
@ -213,7 +213,7 @@ namespace Jackett.Common.Indexers
|
|||
try
|
||||
{
|
||||
var parser = new HtmlParser();
|
||||
var dom = parser.ParseDocument(results.ContentString);
|
||||
using var dom = parser.ParseDocument(results.ContentString);
|
||||
|
||||
var rows = dom.QuerySelectorAll("#sortabletable tr:has(a[href*=\"details.php?id=\"])");
|
||||
foreach (var row in rows)
|
||||
|
|
|
@ -118,7 +118,7 @@ namespace Jackett.Common.Indexers
|
|||
await ConfigureIfOK(result.Cookies, result.ContentString?.Contains("logout.php") == true, () =>
|
||||
{
|
||||
var parser = new HtmlParser();
|
||||
var dom = parser.ParseDocument(result.ContentString);
|
||||
using var dom = parser.ParseDocument(result.ContentString);
|
||||
var errorMessage = dom.QuerySelector("#loginform > .warning")?.TextContent.Trim();
|
||||
|
||||
throw new Exception(errorMessage ?? "Login failed.");
|
||||
|
@ -194,7 +194,7 @@ namespace Jackett.Common.Indexers
|
|||
try
|
||||
{
|
||||
var parser = new HtmlParser();
|
||||
var dom = parser.ParseDocument(searchPage.ContentString);
|
||||
using var dom = parser.ParseDocument(searchPage.ContentString);
|
||||
|
||||
var albumRows = dom.QuerySelectorAll("table#torrent_table > tbody > tr.group:has(strong > a[href*=\"torrents.php?id=\"])");
|
||||
foreach (var row in albumRows)
|
||||
|
|
|
@ -157,7 +157,7 @@ namespace Jackett.Common.Indexers
|
|||
// looks like after some failed login attempts there's a captcha
|
||||
var loginPage = await RequestWithCookiesAsync(LoginUrl, string.Empty);
|
||||
var parser = new HtmlParser();
|
||||
var document = parser.ParseDocument(loginPage.ContentString);
|
||||
using var document = parser.ParseDocument(loginPage.ContentString);
|
||||
var qCaptchaImg = document.QuerySelector("img#captcha_pictcha");
|
||||
if (qCaptchaImg != null)
|
||||
{
|
||||
|
@ -442,7 +442,7 @@ namespace Jackett.Common.Indexers
|
|||
try
|
||||
{
|
||||
var parser = new HtmlParser();
|
||||
var document = parser.ParseDocument(results.ContentString);
|
||||
using var document = parser.ParseDocument(results.ContentString);
|
||||
var rows = document.QuerySelectorAll("div.row");
|
||||
|
||||
foreach (var row in rows)
|
||||
|
@ -471,7 +471,7 @@ namespace Jackett.Common.Indexers
|
|||
try
|
||||
{
|
||||
var parser = new HtmlParser();
|
||||
var document = parser.ParseDocument(results.ContentString);
|
||||
using var document = parser.ParseDocument(results.ContentString);
|
||||
|
||||
var playButton = document.QuerySelector("div.external-btn");
|
||||
if (playButton != null && !playButton.ClassList.Contains("inactive"))
|
||||
|
@ -523,7 +523,7 @@ namespace Jackett.Common.Indexers
|
|||
try
|
||||
{
|
||||
var parser = new HtmlParser();
|
||||
var document = parser.ParseDocument(results.ContentString);
|
||||
using var document = parser.ParseDocument(results.ContentString);
|
||||
var seasons = document.QuerySelectorAll("div.serie-block");
|
||||
var rowSelector = "table.movie-parts-list > tbody > tr";
|
||||
|
||||
|
@ -688,7 +688,7 @@ namespace Jackett.Common.Indexers
|
|||
try
|
||||
{
|
||||
var parser = new HtmlParser();
|
||||
var document = parser.ParseDocument(results.ContentString);
|
||||
using var document = parser.ParseDocument(results.ContentString);
|
||||
var meta = document.QuerySelector("meta");
|
||||
var metaContent = meta.GetAttribute("content");
|
||||
|
||||
|
@ -714,7 +714,7 @@ namespace Jackett.Common.Indexers
|
|||
try
|
||||
{
|
||||
var parser = new HtmlParser();
|
||||
var document = parser.ParseDocument(results.ContentString);
|
||||
using var document = parser.ParseDocument(results.ContentString);
|
||||
var rows = document.QuerySelectorAll("div.inner-box--item");
|
||||
|
||||
if (rows.Count() > 0)
|
||||
|
|
|
@ -169,7 +169,7 @@ namespace Jackett.Common.Indexers
|
|||
try
|
||||
{
|
||||
var searchResultParser = new HtmlParser();
|
||||
var doc = searchResultParser.ParseDocument(result.ContentString);
|
||||
using var doc = searchResultParser.ParseDocument(result.ContentString);
|
||||
|
||||
var container = doc.QuerySelector(".gap-y-3 > div:nth-child(1) > div:nth-child(1)");
|
||||
var parsedDetailsLink = new List<string>();
|
||||
|
@ -223,7 +223,7 @@ namespace Jackett.Common.Indexers
|
|||
try
|
||||
{
|
||||
var searchResultParser = new HtmlParser();
|
||||
var doc = searchResultParser.ParseDocument(result.ContentString);
|
||||
using var doc = searchResultParser.ParseDocument(result.ContentString);
|
||||
|
||||
var table = doc.QuerySelector(".w-11\\/12");
|
||||
// check the search term is valid
|
||||
|
@ -304,7 +304,7 @@ namespace Jackett.Common.Indexers
|
|||
throw new ExceptionWithConfigData(result.ContentString, configData);
|
||||
|
||||
var searchResultParser = new HtmlParser();
|
||||
var doc = searchResultParser.ParseDocument(result.ContentString);
|
||||
using var doc = searchResultParser.ParseDocument(result.ContentString);
|
||||
|
||||
var rows = doc.QuerySelectorAll("tr.border");
|
||||
quality = CleanQuality(quality);
|
||||
|
@ -344,7 +344,7 @@ namespace Jackett.Common.Indexers
|
|||
throw new ExceptionWithConfigData(result.ContentString, configData);
|
||||
|
||||
var searchResultParser = new HtmlParser();
|
||||
var doc = searchResultParser.ParseDocument(result.ContentString);
|
||||
using var doc = searchResultParser.ParseDocument(result.ContentString);
|
||||
|
||||
var downloadLink = doc.QuerySelector(".ml-2").GetAttribute("href");
|
||||
|
||||
|
|
|
@ -143,7 +143,7 @@ namespace Jackett.Common.Indexers
|
|||
result.Cookies, result.ContentString?.Contains("profile.php") == true, () =>
|
||||
{
|
||||
var parser = new HtmlParser();
|
||||
var dom = parser.ParseDocument(result.ContentString);
|
||||
using var dom = parser.ParseDocument(result.ContentString);
|
||||
var msgContainer = dom.QuerySelector("#hibauzenet table tbody tr")?.Children[1];
|
||||
throw new ExceptionWithConfigData(msgContainer?.TextContent ?? "Error while trying to login.", configData);
|
||||
});
|
||||
|
@ -196,7 +196,7 @@ namespace Jackett.Common.Indexers
|
|||
var results = await RequestWithCookiesAndRetryAsync(
|
||||
SearchUrl, null, RequestType.POST, null, pairs.ToEnumerable(true));
|
||||
var parser = new HtmlParser();
|
||||
var dom = parser.ParseDocument(results.ContentString);
|
||||
using var dom = parser.ParseDocument(results.ContentString);
|
||||
|
||||
// find number of torrents / page
|
||||
var torrentPerPage = dom.QuerySelectorAll(".box_torrent").Length;
|
||||
|
@ -243,7 +243,7 @@ namespace Jackett.Common.Indexers
|
|||
try
|
||||
{
|
||||
var parser = new HtmlParser();
|
||||
var dom = parser.ParseDocument(results.ContentString);
|
||||
using var dom = parser.ParseDocument(results.ContentString);
|
||||
var rows = dom.QuerySelectorAll(".box_torrent").Skip(previouslyParsedOnPage).Take(limit - alreadyFound);
|
||||
|
||||
var key = ParseUtil.GetArgumentFromQueryString(
|
||||
|
|
|
@ -248,7 +248,7 @@ namespace Jackett.Common.Indexers
|
|||
// Getting results & Store content
|
||||
var response = await RequestWithCookiesAndRetryAsync(request, ConfigData.CookieHeader.Value);
|
||||
var parser = new HtmlParser();
|
||||
var dom = parser.ParseDocument(response.ContentString);
|
||||
using var dom = parser.ParseDocument(response.ContentString);
|
||||
|
||||
try
|
||||
{
|
||||
|
|
|
@ -146,7 +146,7 @@ namespace Jackett.Common.Indexers
|
|||
try
|
||||
{
|
||||
var parser = new HtmlParser();
|
||||
var dom = parser.ParseDocument(results.ContentString);
|
||||
using var dom = parser.ParseDocument(results.ContentString);
|
||||
var rows = dom.QuerySelectorAll("table.main > tbody > tr");
|
||||
foreach (var row in rows.Skip(1))
|
||||
{
|
||||
|
|
|
@ -69,7 +69,7 @@ namespace Jackett.Common.Indexers
|
|||
{
|
||||
var loginPage = await RequestWithCookiesAsync(LoginUrl, string.Empty);
|
||||
var LoginParser = new HtmlParser();
|
||||
var LoginDocument = LoginParser.ParseDocument(loginPage.ContentString);
|
||||
using var LoginDocument = LoginParser.ParseDocument(loginPage.ContentString);
|
||||
|
||||
configData.CaptchaCookie.Value = loginPage.Cookies;
|
||||
|
||||
|
@ -116,7 +116,7 @@ namespace Jackett.Common.Indexers
|
|||
await ConfigureIfOK(result.Cookies, result.ContentString.Contains("logout.php"), () =>
|
||||
{
|
||||
var LoginParser = new HtmlParser();
|
||||
var LoginDocument = LoginParser.ParseDocument(result.ContentString);
|
||||
using var LoginDocument = LoginParser.ParseDocument(result.ContentString);
|
||||
var errorMessage = LoginDocument.QuerySelector("span.warning[id!=\"no-cookies\"]:has(br)").TextContent;
|
||||
throw new ExceptionWithConfigData(errorMessage, configData);
|
||||
});
|
||||
|
@ -158,7 +158,7 @@ namespace Jackett.Common.Indexers
|
|||
|
||||
var IMDBRegEx = new Regex(@"tt(\d+)", RegexOptions.Compiled);
|
||||
var hParser = new HtmlParser();
|
||||
var ResultDocument = hParser.ParseDocument(results.ContentString);
|
||||
using var ResultDocument = hParser.ParseDocument(results.ContentString);
|
||||
try
|
||||
{
|
||||
var Groups = ResultDocument.QuerySelectorAll("div.browsePoster");
|
||||
|
|
|
@ -177,7 +177,7 @@ namespace Jackett.Common.Indexers
|
|||
await ConfigureIfOK(loginCookies, result.ContentString?.Contains("logout.php") == true, () =>
|
||||
{
|
||||
var loginResultParser = new HtmlParser();
|
||||
var loginResultDocument = loginResultParser.ParseDocument(result.ContentString);
|
||||
using var loginResultDocument = loginResultParser.ParseDocument(result.ContentString);
|
||||
var errorMessage = loginResultDocument.QuerySelector("table.body_table font[color~=\"red\"]")?.TextContent.Trim();
|
||||
|
||||
throw new ExceptionWithConfigData(errorMessage ?? "Login failed", configData);
|
||||
|
@ -249,7 +249,7 @@ namespace Jackett.Common.Indexers
|
|||
try
|
||||
{
|
||||
var parser = new HtmlParser();
|
||||
var dom = parser.ParseDocument(response.ContentString);
|
||||
using var dom = parser.ParseDocument(response.ContentString);
|
||||
|
||||
var rows = dom.QuerySelectorAll("table > tbody > tr.browse");
|
||||
foreach (var row in rows)
|
||||
|
|
|
@ -159,7 +159,7 @@ namespace Jackett.Common.Indexers
|
|||
try
|
||||
{
|
||||
var parser = new HtmlParser();
|
||||
var dom = parser.ParseDocument(results.ContentString);
|
||||
using var dom = parser.ParseDocument(results.ContentString);
|
||||
var rows = dom.QuerySelectorAll("#torrents-table > tbody > tr");
|
||||
|
||||
foreach (var row in rows.Skip(1))
|
||||
|
|
|
@ -1398,7 +1398,7 @@ namespace Jackett.Common.Indexers
|
|||
configData.CookieHeader.Value = null;
|
||||
var response = await RequestWithCookiesAsync(LoginUrl);
|
||||
var parser = new HtmlParser();
|
||||
var doc = parser.ParseDocument(response.ContentString);
|
||||
using var doc = parser.ParseDocument(response.ContentString);
|
||||
var captchaimg = doc.QuerySelector("img[src^=\"https://static.rutracker.cc/captcha/\"]");
|
||||
|
||||
if (captchaimg != null)
|
||||
|
@ -1444,7 +1444,7 @@ namespace Jackett.Common.Indexers
|
|||
await ConfigureIfOK(result.Cookies, result.ContentString != null && result.ContentString.Contains("id=\"logged-in-username\""), () =>
|
||||
{
|
||||
var parser = new HtmlParser();
|
||||
var doc = parser.ParseDocument(result.ContentString);
|
||||
using var doc = parser.ParseDocument(result.ContentString);
|
||||
var errorMessage = doc.QuerySelector("h4.warnColor1.tCenter.mrg_16, div.msg-main")?.TextContent.Trim();
|
||||
|
||||
throw new ExceptionWithConfigData(errorMessage ?? "RuTracker authentication failed", configData);
|
||||
|
@ -1498,7 +1498,7 @@ namespace Jackett.Common.Indexers
|
|||
var response = await RequestWithCookiesAsync(link.ToString());
|
||||
|
||||
var parser = new HtmlParser();
|
||||
var dom = parser.ParseDocument(response.ContentString);
|
||||
using var dom = parser.ParseDocument(response.ContentString);
|
||||
var magnetLink = dom.QuerySelector("table.attach a.magnet-link[href^=\"magnet:?\"]")?.GetAttribute("href");
|
||||
|
||||
if (magnetLink == null)
|
||||
|
@ -1560,7 +1560,7 @@ namespace Jackett.Common.Indexers
|
|||
private IHtmlCollection<IElement> GetReleaseRows(WebResult results)
|
||||
{
|
||||
var parser = new HtmlParser();
|
||||
var doc = parser.ParseDocument(results.ContentString);
|
||||
using var doc = parser.ParseDocument(results.ContentString);
|
||||
var rows = doc.QuerySelectorAll("table#tor-tbl > tbody > tr");
|
||||
return rows;
|
||||
}
|
||||
|
|
|
@ -166,7 +166,7 @@ namespace Jackett.Common.Indexers
|
|||
try
|
||||
{
|
||||
var parser = new HtmlParser();
|
||||
var dom = parser.ParseDocument(htmlResponse);
|
||||
using var dom = parser.ParseDocument(htmlResponse);
|
||||
|
||||
var table = dom.QuerySelector("table.movehere");
|
||||
if (table == null)
|
||||
|
|
|
@ -124,7 +124,7 @@ namespace Jackett.Common.Indexers
|
|||
response = await ReloginIfNecessaryAsync(response);
|
||||
|
||||
var parser = new HtmlParser();
|
||||
var dom = parser.ParseDocument(response.ContentString);
|
||||
using var dom = parser.ParseDocument(response.ContentString);
|
||||
|
||||
hasGlobalFreeleech = dom.QuerySelector("span:contains(\"Freeleech until:\"):has(span.datetime)") != null;
|
||||
|
||||
|
@ -185,7 +185,7 @@ namespace Jackett.Common.Indexers
|
|||
var releases = new List<ReleaseInfo>();
|
||||
|
||||
var parser = new HtmlParser();
|
||||
var dom = parser.ParseDocument(response.ContentString);
|
||||
using var dom = parser.ParseDocument(response.ContentString);
|
||||
|
||||
if (!hasGlobalFreeleech)
|
||||
hasGlobalFreeleech = dom.QuerySelector("span:contains(\"Freeleech until:\"):has(span.datetime)") != null;
|
||||
|
|
|
@ -147,7 +147,7 @@ namespace Jackett.Common.Indexers
|
|||
await ConfigureIfOK(result.Cookies, result.ContentString?.Contains("/browse.php") == true, () =>
|
||||
{
|
||||
var parser = new HtmlParser();
|
||||
var dom = parser.ParseDocument(result.ContentString);
|
||||
using var dom = parser.ParseDocument(result.ContentString);
|
||||
var errorMessage = dom.QuerySelector("h5")?.TextContent;
|
||||
|
||||
if (result.ContentString.Contains("Wrong Captcha!"))
|
||||
|
@ -221,7 +221,7 @@ namespace Jackett.Common.Indexers
|
|||
try
|
||||
{
|
||||
var parser = new HtmlParser();
|
||||
var dom = parser.ParseDocument(response.ContentString);
|
||||
using var dom = parser.ParseDocument(response.ContentString);
|
||||
|
||||
var rows = dom.QuerySelectorAll("div.boxContent > table > tbody > tr");
|
||||
foreach (var row in rows)
|
||||
|
|
|
@ -169,7 +169,7 @@ namespace Jackett.Common.Indexers
|
|||
var downloadLink = new Uri(DownloadUrl + "?id=" + torrentId);
|
||||
// the genre field is a html string, and we just want the text
|
||||
var parser = new HtmlParser();
|
||||
var dom = parser.ParseDocument(row[(int)TorrentParts.Genre]);
|
||||
using var dom = parser.ParseDocument(row[(int)TorrentParts.Genre]);
|
||||
var genres = dom.QuerySelector("*").TextContent.Replace("\xA0", "");
|
||||
var description = "";
|
||||
if (!string.IsNullOrWhiteSpace(genres))
|
||||
|
|
|
@ -222,7 +222,7 @@ namespace Jackett.Common.Indexers
|
|||
await ConfigureIfOK(result.Cookies, result.ContentString != null && result.ContentString.Contains("logout=true"), () =>
|
||||
{
|
||||
var loginResultParser = new HtmlParser();
|
||||
var loginResultDocument = loginResultParser.ParseDocument(result.ContentString);
|
||||
using var loginResultDocument = loginResultParser.ParseDocument(result.ContentString);
|
||||
var errorMessage = loginResultDocument.QuerySelector("table.forumline table span.gen")?.FirstChild?.TextContent;
|
||||
|
||||
throw new ExceptionWithConfigData(errorMessage ?? "Unknown error message, please report.", configData);
|
||||
|
@ -281,7 +281,7 @@ namespace Jackett.Common.Indexers
|
|||
try
|
||||
{
|
||||
var searchResultParser = new HtmlParser();
|
||||
var searchResultDocument = searchResultParser.ParseDocument(results.ContentString);
|
||||
using var searchResultDocument = searchResultParser.ParseDocument(results.ContentString);
|
||||
var rows = searchResultDocument.QuerySelectorAll("table.forumline > tbody > tr[class*=\"prow\"]");
|
||||
|
||||
foreach (var row in rows)
|
||||
|
|
|
@ -116,7 +116,7 @@ namespace Jackett.Common.Indexers
|
|||
result.Cookies, result.ContentString?.Contains("my.php") == true, () =>
|
||||
{
|
||||
var parser = new HtmlParser();
|
||||
var dom = parser.ParseDocument(result.ContentString);
|
||||
using var dom = parser.ParseDocument(result.ContentString);
|
||||
var messageEl = dom.QuerySelector("td.embedded");
|
||||
var errorMessage = messageEl != null ? messageEl.TextContent : result.ContentString;
|
||||
throw new ExceptionWithConfigData(errorMessage, configData);
|
||||
|
@ -159,7 +159,7 @@ namespace Jackett.Common.Indexers
|
|||
try
|
||||
{
|
||||
var parser = new HtmlParser();
|
||||
var dom = parser.ParseDocument(response.ContentString);
|
||||
using var dom = parser.ParseDocument(response.ContentString);
|
||||
var rows = dom.QuerySelectorAll("table > tbody:has(tr > td.colhead) > tr:not(:has(td.colhead))");
|
||||
foreach (var row in rows)
|
||||
{
|
||||
|
|
|
@ -138,7 +138,7 @@ namespace Jackett.Common.Indexers
|
|||
!result.ContentString.Contains("index.php?strWebValue=account&strWebAction=logout")))
|
||||
{
|
||||
var parser = new HtmlParser();
|
||||
var dom = parser.ParseDocument(result.ContentString);
|
||||
using var dom = parser.ParseDocument(result.ContentString);
|
||||
var errorMessageEl = dom.QuerySelector("table > tbody > tr > td[valign=top][width=100%]");
|
||||
var errorMessage = errorMessageEl != null ? errorMessageEl.InnerHtml : result.ContentString;
|
||||
throw new ExceptionWithConfigData(errorMessage, configData);
|
||||
|
@ -155,7 +155,7 @@ namespace Jackett.Common.Indexers
|
|||
{
|
||||
var loginPage = await RequestWithCookiesAsync(IndexUrl, string.Empty);
|
||||
var parser = new HtmlParser();
|
||||
var dom = parser.ParseDocument(loginPage.ContentString);
|
||||
using var dom = parser.ParseDocument(loginPage.ContentString);
|
||||
var qCaptchaImg = dom.QuerySelector("td.tablea > img");
|
||||
if (qCaptchaImg != null)
|
||||
{
|
||||
|
@ -212,7 +212,7 @@ namespace Jackett.Common.Indexers
|
|||
try
|
||||
{
|
||||
var parser = new HtmlParser();
|
||||
var dom = parser.ParseDocument(response.ContentString);
|
||||
using var dom = parser.ParseDocument(response.ContentString);
|
||||
var rows = dom.QuerySelectorAll("table.torrenttable > tbody > tr");
|
||||
foreach (var row in rows.Skip(1))
|
||||
{
|
||||
|
|
|
@ -94,7 +94,7 @@ namespace Jackett.Common.Indexers
|
|||
await ConfigureIfOK(response.Cookies, response.Cookies != null && response.Cookies.Contains("uid=") && response.Cookies.Contains("pass="), () =>
|
||||
{
|
||||
var parser = new HtmlParser();
|
||||
var dom = parser.ParseDocument(response.ContentString);
|
||||
using var dom = parser.ParseDocument(response.ContentString);
|
||||
var errorMessage = dom.QuerySelector(".login-content span.text-red")?.TextContent.Trim();
|
||||
|
||||
throw new ExceptionWithConfigData(errorMessage ?? "Unknown error message, please report.", configData);
|
||||
|
@ -137,9 +137,9 @@ namespace Jackett.Common.Indexers
|
|||
var publishDate = DateTime.Now;
|
||||
foreach (var item in jsonContent.Value<JArray>("data"))
|
||||
{
|
||||
var detailsDom = parser.ParseDocument(item.SelectToken("[0]").Value<string>());
|
||||
var categoryDom = parser.ParseDocument(item.SelectToken("[1]").Value<string>());
|
||||
var groupDom = parser.ParseDocument(item.SelectToken("[7]").Value<string>());
|
||||
using var detailsDom = parser.ParseDocument(item.SelectToken("[0]").Value<string>());
|
||||
using var categoryDom = parser.ParseDocument(item.SelectToken("[1]").Value<string>());
|
||||
using var groupDom = parser.ParseDocument(item.SelectToken("[7]").Value<string>());
|
||||
|
||||
var qTitleLink = detailsDom.QuerySelector("a[href^=\"torrents-details.php?id=\"]");
|
||||
var title = qTitleLink?.TextContent.Trim();
|
||||
|
@ -191,7 +191,7 @@ namespace Jackett.Common.Indexers
|
|||
var response = await RequestWithCookiesAsync(link.ToString());
|
||||
|
||||
var parser = new HtmlParser();
|
||||
var dom = parser.ParseDocument(response.ContentString);
|
||||
using var dom = parser.ParseDocument(response.ContentString);
|
||||
var downloadLink = dom.QuerySelector("a[href^=\"download.php?id=\"]")?.GetAttribute("href")?.Trim();
|
||||
|
||||
if (downloadLink == null)
|
||||
|
|
|
@ -163,7 +163,7 @@ namespace Jackett.Common.Indexers
|
|||
{
|
||||
var loginPage = await RequestWithCookiesAsync(LandingUrl);
|
||||
var parser = new HtmlParser();
|
||||
var dom = parser.ParseDocument(loginPage.ContentString);
|
||||
using var dom = parser.ParseDocument(loginPage.ContentString);
|
||||
var qCaptchaImg = dom.QuerySelector("img#regimage");
|
||||
if (qCaptchaImg != null)
|
||||
{
|
||||
|
@ -204,7 +204,7 @@ namespace Jackett.Common.Indexers
|
|||
await ConfigureIfOK(result.Cookies, result.ContentString?.Contains("logout.php") == true, () =>
|
||||
{
|
||||
var parser = new HtmlParser();
|
||||
var dom = parser.ParseDocument(result.ContentString);
|
||||
using var dom = parser.ParseDocument(result.ContentString);
|
||||
|
||||
var errorMessage = dom.QuerySelector(".left_side table:nth-of-type(1) tr:nth-of-type(2)")?.TextContent.Trim().Replace("\n\t", " ");
|
||||
if (errorMessage.IsNullOrWhiteSpace())
|
||||
|
@ -268,7 +268,7 @@ namespace Jackett.Common.Indexers
|
|||
try
|
||||
{
|
||||
var parser = new HtmlParser();
|
||||
var dom = parser.ParseDocument(searchPage.ContentString);
|
||||
using var dom = parser.ParseDocument(searchPage.ContentString);
|
||||
var rows = dom.QuerySelectorAll("table#sortabletable > tbody > tr:has(div > a[href*=\"details.php?id=\"])");
|
||||
foreach (var row in rows)
|
||||
{
|
||||
|
|
|
@ -177,7 +177,7 @@ namespace Jackett.Common.Indexers
|
|||
try
|
||||
{
|
||||
var parser = new HtmlParser();
|
||||
var doc = parser.ParseDocument(results);
|
||||
using var doc = parser.ParseDocument(results);
|
||||
|
||||
var rows = doc.QuerySelectorAll("table.torrent_list > tbody > tr");
|
||||
foreach (var row in rows.Skip(1))
|
||||
|
@ -248,7 +248,7 @@ namespace Jackett.Common.Indexers
|
|||
CookieHeader = "";
|
||||
var result = await RequestWithCookiesAsync(Login1Url, "");
|
||||
var parser = new HtmlParser();
|
||||
var dom = parser.ParseDocument(result.ContentString);
|
||||
using var dom = parser.ParseDocument(result.ContentString);
|
||||
var sessionId = dom.QuerySelector("input#session_id")?.GetAttribute("value");
|
||||
if (string.IsNullOrWhiteSpace(sessionId))
|
||||
throw new ExceptionWithConfigData("Error getting the Session ID", configData);
|
||||
|
|
Loading…
Reference in New Issue