feat: parse html for url

This commit is contained in:
2025-07-15 05:29:18 +00:00
parent 1117a1ffa9
commit 7f126eb649
30 changed files with 457 additions and 0 deletions

View File

@@ -0,0 +1,14 @@
<Project Sdk="Microsoft.NET.Sdk">
<PropertyGroup>
<OutputType>Exe</OutputType>
<TargetFramework>net8.0</TargetFramework>
<ImplicitUsings>enable</ImplicitUsings>
<Nullable>enable</Nullable>
</PropertyGroup>
<ItemGroup>
<PackageReference Include="HtmlAgilityPack" Version="1.12.1" />
</ItemGroup>
</Project>

79
HiddenUrl/Program.cs Normal file
View File

@@ -0,0 +1,79 @@
// See https://aka.ms/new-console-template for more information
using System;
using System.Net.Http;
using System.Threading.Tasks;
using HtmlAgilityPack;
using System.Linq;
var CHALLENGE_URL = "https://tns4lpgmziiypnxxzel5ss5nyu0nftol.lambda-url.us-east-1.on.aws/challenge";
var PAGE_CACHE = "challenge.html";
try
{
string html;
if (File.Exists(PAGE_CACHE))
{
Console.WriteLine("Loading HTML from cache...");
html = await File.ReadAllTextAsync(PAGE_CACHE);
}
else
{
Console.WriteLine("Downloading HTML...");
try
{
using HttpClient client = new HttpClient();
html = await client.GetStringAsync(CHALLENGE_URL);
// Write to cache
await File.WriteAllTextAsync(PAGE_CACHE, html);
Console.WriteLine("HTML cached to file.");
}
catch (HttpRequestException e)
{
Console.WriteLine($"HTTP error: {e.Message}");
return;
}
}
var doc = new HtmlDocument();
doc.LoadHtml(html);
// Find all <section> with data-id starting with "92"
var sections = doc.DocumentNode.SelectNodes("//section[starts-with(@data-id, '92')]");
if (sections == null) return;
foreach (var section in sections)
{
// Find <article> children with data-class ending in "45"
var articles = section.SelectNodes(".//article[substring(@data-class, string-length(@data-class) - 1) = '45']");
if (articles == null) continue;
foreach (var article in articles)
{
// Find <div> children with data-tag containing "78"
var divs = article.SelectNodes(".//div[contains(@data-tag, '78')]");
if (divs == null) continue;
foreach (var div in divs)
{
// Find all <b> tags nested inside this div
var bTags = div.SelectNodes(".//b[contains(concat(' ', normalize-space(@class), ' '), ' ref ')]");
if (bTags == null) continue;
foreach (var b in bTags)
{
Console.Write(b.GetAttributeValue("value", null));
}
}
}
}
// end with newline
Console.WriteLine();
}
catch
{
Console.WriteLine("Unable to get HTML from page!");
}

Binary file not shown.

View File

@@ -0,0 +1,41 @@
{
"runtimeTarget": {
"name": ".NETCoreApp,Version=v8.0",
"signature": ""
},
"compilationOptions": {},
"targets": {
".NETCoreApp,Version=v8.0": {
"HiddenUrl/1.0.0": {
"dependencies": {
"HtmlAgilityPack": "1.12.1"
},
"runtime": {
"HiddenUrl.dll": {}
}
},
"HtmlAgilityPack/1.12.1": {
"runtime": {
"lib/net8.0/HtmlAgilityPack.dll": {
"assemblyVersion": "1.12.1.0",
"fileVersion": "1.12.1.0"
}
}
}
}
},
"libraries": {
"HiddenUrl/1.0.0": {
"type": "project",
"serviceable": false,
"sha512": ""
},
"HtmlAgilityPack/1.12.1": {
"type": "package",
"serviceable": true,
"sha512": "sha512-SP6/2Y26CXtxjXn0Wwsom9Ek35SNWKHEu/IWhNEFejBSSVWWXPRSlpqpBSYWv1SQhYFnwMO01xVbEdK3iRR4hg==",
"path": "htmlagilitypack/1.12.1",
"hashPath": "htmlagilitypack.1.12.1.nupkg.sha512"
}
}
}

Binary file not shown.

Binary file not shown.

View File

@@ -0,0 +1,12 @@
{
"runtimeOptions": {
"tfm": "net8.0",
"framework": {
"name": "Microsoft.NETCore.App",
"version": "8.0.0"
},
"configProperties": {
"System.Runtime.Serialization.EnableUnsafeBinaryFormatterSerialization": false
}
}
}

Binary file not shown.

6
HiddenUrl/challenge.html Normal file

File diff suppressed because one or more lines are too long

View File

@@ -0,0 +1,4 @@
// <autogenerated />
using System;
using System.Reflection;
[assembly: global::System.Runtime.Versioning.TargetFrameworkAttribute(".NETCoreApp,Version=v8.0", FrameworkDisplayName = ".NET 8.0")]

View File

@@ -0,0 +1,22 @@
//------------------------------------------------------------------------------
// <auto-generated>
// This code was generated by a tool.
//
// Changes to this file may cause incorrect behavior and will be lost if
// the code is regenerated.
// </auto-generated>
//------------------------------------------------------------------------------
using System;
using System.Reflection;
[assembly: System.Reflection.AssemblyCompanyAttribute("HiddenUrl")]
[assembly: System.Reflection.AssemblyConfigurationAttribute("Debug")]
[assembly: System.Reflection.AssemblyFileVersionAttribute("1.0.0.0")]
[assembly: System.Reflection.AssemblyInformationalVersionAttribute("1.0.0+1117a1ffa98bc02bf75f89eede18bd6b1f7ad258")]
[assembly: System.Reflection.AssemblyProductAttribute("HiddenUrl")]
[assembly: System.Reflection.AssemblyTitleAttribute("HiddenUrl")]
[assembly: System.Reflection.AssemblyVersionAttribute("1.0.0.0")]
// Generated by the MSBuild WriteCodeFragment class.

View File

@@ -0,0 +1 @@
c3a2e18a6f2e98c4f872d3b8b28f337cb1cb200817e350b2b23aaa895d017794

View File

@@ -0,0 +1,13 @@
is_global = true
build_property.TargetFramework = net8.0
build_property.TargetPlatformMinVersion =
build_property.UsingMicrosoftNETSdkWeb =
build_property.ProjectTypeGuids =
build_property.InvariantGlobalization =
build_property.PlatformNeutralAssembly =
build_property.EnforceExtendedAnalyzerRules =
build_property._SupportedPlatformList = Linux,macOS,Windows
build_property.RootNamespace = HiddenUrl
build_property.ProjectDir = /root/development/ramp-application/HiddenUrl/
build_property.EnableComHosting =
build_property.EnableGeneratedComInterfaceComImportInterop =

View File

@@ -0,0 +1,8 @@
// <auto-generated/>
global using global::System;
global using global::System.Collections.Generic;
global using global::System.IO;
global using global::System.Linq;
global using global::System.Net.Http;
global using global::System.Threading;
global using global::System.Threading.Tasks;

Binary file not shown.

View File

@@ -0,0 +1 @@
499cdef6b08f2f08fdf449fd4186896c74703b3afd71ce187158418228d332cd

View File

@@ -0,0 +1,17 @@
/root/development/ramp-application/HiddenUrl/obj/Debug/net8.0/HiddenUrl.GeneratedMSBuildEditorConfig.editorconfig
/root/development/ramp-application/HiddenUrl/obj/Debug/net8.0/HiddenUrl.AssemblyInfoInputs.cache
/root/development/ramp-application/HiddenUrl/obj/Debug/net8.0/HiddenUrl.AssemblyInfo.cs
/root/development/ramp-application/HiddenUrl/obj/Debug/net8.0/HiddenUrl.csproj.CoreCompileInputs.cache
/root/development/ramp-application/HiddenUrl/bin/Debug/net8.0/HiddenUrl
/root/development/ramp-application/HiddenUrl/bin/Debug/net8.0/HiddenUrl.deps.json
/root/development/ramp-application/HiddenUrl/bin/Debug/net8.0/HiddenUrl.runtimeconfig.json
/root/development/ramp-application/HiddenUrl/bin/Debug/net8.0/HiddenUrl.dll
/root/development/ramp-application/HiddenUrl/bin/Debug/net8.0/HiddenUrl.pdb
/root/development/ramp-application/HiddenUrl/obj/Debug/net8.0/HiddenUrl.dll
/root/development/ramp-application/HiddenUrl/obj/Debug/net8.0/refint/HiddenUrl.dll
/root/development/ramp-application/HiddenUrl/obj/Debug/net8.0/HiddenUrl.pdb
/root/development/ramp-application/HiddenUrl/obj/Debug/net8.0/HiddenUrl.genruntimeconfig.cache
/root/development/ramp-application/HiddenUrl/obj/Debug/net8.0/ref/HiddenUrl.dll
/root/development/ramp-application/HiddenUrl/obj/Debug/net8.0/HiddenUrl.csproj.AssemblyReference.cache
/root/development/ramp-application/HiddenUrl/bin/Debug/net8.0/HtmlAgilityPack.dll
/root/development/ramp-application/HiddenUrl/obj/Debug/net8.0/HiddenUrl.csproj.Up2Date

Binary file not shown.

View File

@@ -0,0 +1 @@
5990ebd481f422b441ccf26cf19edfe9846fbfe51da10e7f1a57fb61141e5887

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

View File

@@ -0,0 +1,72 @@
{
"format": 1,
"restore": {
"/root/development/ramp-application/HiddenUrl/HiddenUrl.csproj": {}
},
"projects": {
"/root/development/ramp-application/HiddenUrl/HiddenUrl.csproj": {
"version": "1.0.0",
"restore": {
"projectUniqueName": "/root/development/ramp-application/HiddenUrl/HiddenUrl.csproj",
"projectName": "HiddenUrl",
"projectPath": "/root/development/ramp-application/HiddenUrl/HiddenUrl.csproj",
"packagesPath": "/root/.nuget/packages/",
"outputPath": "/root/development/ramp-application/HiddenUrl/obj/",
"projectStyle": "PackageReference",
"configFilePaths": [
"/root/.nuget/NuGet/NuGet.Config"
],
"originalTargetFrameworks": [
"net8.0"
],
"sources": {
"https://api.nuget.org/v3/index.json": {}
},
"frameworks": {
"net8.0": {
"targetAlias": "net8.0",
"projectReferences": {}
}
},
"warningProperties": {
"warnAsError": [
"NU1605"
]
},
"restoreAuditProperties": {
"enableAudit": "true",
"auditLevel": "low",
"auditMode": "direct"
}
},
"frameworks": {
"net8.0": {
"targetAlias": "net8.0",
"dependencies": {
"HtmlAgilityPack": {
"target": "Package",
"version": "[1.12.1, )"
}
},
"imports": [
"net461",
"net462",
"net47",
"net471",
"net472",
"net48",
"net481"
],
"assetTargetFallback": true,
"warn": true,
"frameworkReferences": {
"Microsoft.NETCore.App": {
"privateAssets": "all"
}
},
"runtimeIdentifierGraphPath": "/usr/share/dotnet/sdk/8.0.411/PortableRuntimeIdentifierGraph.json"
}
}
}
}
}

View File

@@ -0,0 +1,15 @@
<?xml version="1.0" encoding="utf-8" standalone="no"?>
<Project ToolsVersion="14.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<PropertyGroup Condition=" '$(ExcludeRestorePackageImports)' != 'true' ">
<RestoreSuccess Condition=" '$(RestoreSuccess)' == '' ">True</RestoreSuccess>
<RestoreTool Condition=" '$(RestoreTool)' == '' ">NuGet</RestoreTool>
<ProjectAssetsFile Condition=" '$(ProjectAssetsFile)' == '' ">$(MSBuildThisFileDirectory)project.assets.json</ProjectAssetsFile>
<NuGetPackageRoot Condition=" '$(NuGetPackageRoot)' == '' ">/root/.nuget/packages/</NuGetPackageRoot>
<NuGetPackageFolders Condition=" '$(NuGetPackageFolders)' == '' ">/root/.nuget/packages/</NuGetPackageFolders>
<NuGetProjectStyle Condition=" '$(NuGetProjectStyle)' == '' ">PackageReference</NuGetProjectStyle>
<NuGetToolVersion Condition=" '$(NuGetToolVersion)' == '' ">6.11.1</NuGetToolVersion>
</PropertyGroup>
<ItemGroup Condition=" '$(ExcludeRestorePackageImports)' != 'true' ">
<SourceRoot Include="/root/.nuget/packages/" />
</ItemGroup>
</Project>

View File

@@ -0,0 +1,2 @@
<?xml version="1.0" encoding="utf-8" standalone="no"?>
<Project ToolsVersion="14.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003" />

View File

@@ -0,0 +1,139 @@
{
"version": 3,
"targets": {
"net8.0": {
"HtmlAgilityPack/1.12.1": {
"type": "package",
"compile": {
"lib/net8.0/HtmlAgilityPack.dll": {
"related": ".deps.json;.pdb;.xml"
}
},
"runtime": {
"lib/net8.0/HtmlAgilityPack.dll": {
"related": ".deps.json;.pdb;.xml"
}
}
}
}
},
"libraries": {
"HtmlAgilityPack/1.12.1": {
"sha512": "SP6/2Y26CXtxjXn0Wwsom9Ek35SNWKHEu/IWhNEFejBSSVWWXPRSlpqpBSYWv1SQhYFnwMO01xVbEdK3iRR4hg==",
"type": "package",
"path": "htmlagilitypack/1.12.1",
"files": [
".nupkg.metadata",
".signature.p7s",
"htmlagilitypack.1.12.1.nupkg.sha512",
"htmlagilitypack.nuspec",
"lib/Net35/HtmlAgilityPack.dll",
"lib/Net35/HtmlAgilityPack.pdb",
"lib/Net35/HtmlAgilityPack.xml",
"lib/Net40-client/HtmlAgilityPack.dll",
"lib/Net40-client/HtmlAgilityPack.pdb",
"lib/Net40-client/HtmlAgilityPack.xml",
"lib/Net40/HtmlAgilityPack.XML",
"lib/Net40/HtmlAgilityPack.dll",
"lib/Net40/HtmlAgilityPack.pdb",
"lib/Net45/HtmlAgilityPack.XML",
"lib/Net45/HtmlAgilityPack.dll",
"lib/Net45/HtmlAgilityPack.pdb",
"lib/NetCore45/HtmlAgilityPack.XML",
"lib/NetCore45/HtmlAgilityPack.dll",
"lib/NetCore45/HtmlAgilityPack.pdb",
"lib/net8.0/HtmlAgilityPack.deps.json",
"lib/net8.0/HtmlAgilityPack.dll",
"lib/net8.0/HtmlAgilityPack.pdb",
"lib/net8.0/HtmlAgilityPack.xml",
"lib/netstandard2.0/HtmlAgilityPack.deps.json",
"lib/netstandard2.0/HtmlAgilityPack.dll",
"lib/netstandard2.0/HtmlAgilityPack.pdb",
"lib/netstandard2.0/HtmlAgilityPack.xml",
"lib/portable-net45+netcore45+wp8+MonoAndroid+MonoTouch/HtmlAgilityPack.XML",
"lib/portable-net45+netcore45+wp8+MonoAndroid+MonoTouch/HtmlAgilityPack.dll",
"lib/portable-net45+netcore45+wp8+MonoAndroid+MonoTouch/HtmlAgilityPack.pdb",
"lib/portable-net45+netcore45+wpa81+wp8+MonoAndroid+MonoTouch/HtmlAgilityPack.XML",
"lib/portable-net45+netcore45+wpa81+wp8+MonoAndroid+MonoTouch/HtmlAgilityPack.dll",
"lib/portable-net45+netcore45+wpa81+wp8+MonoAndroid+MonoTouch/HtmlAgilityPack.pdb",
"lib/uap10.0/HtmlAgilityPack.XML",
"lib/uap10.0/HtmlAgilityPack.dll",
"lib/uap10.0/HtmlAgilityPack.pdb",
"lib/uap10.0/HtmlAgilityPack.pri",
"readme.md"
]
}
},
"projectFileDependencyGroups": {
"net8.0": [
"HtmlAgilityPack >= 1.12.1"
]
},
"packageFolders": {
"/root/.nuget/packages/": {}
},
"project": {
"version": "1.0.0",
"restore": {
"projectUniqueName": "/root/development/ramp-application/HiddenUrl/HiddenUrl.csproj",
"projectName": "HiddenUrl",
"projectPath": "/root/development/ramp-application/HiddenUrl/HiddenUrl.csproj",
"packagesPath": "/root/.nuget/packages/",
"outputPath": "/root/development/ramp-application/HiddenUrl/obj/",
"projectStyle": "PackageReference",
"configFilePaths": [
"/root/.nuget/NuGet/NuGet.Config"
],
"originalTargetFrameworks": [
"net8.0"
],
"sources": {
"https://api.nuget.org/v3/index.json": {}
},
"frameworks": {
"net8.0": {
"targetAlias": "net8.0",
"projectReferences": {}
}
},
"warningProperties": {
"warnAsError": [
"NU1605"
]
},
"restoreAuditProperties": {
"enableAudit": "true",
"auditLevel": "low",
"auditMode": "direct"
}
},
"frameworks": {
"net8.0": {
"targetAlias": "net8.0",
"dependencies": {
"HtmlAgilityPack": {
"target": "Package",
"version": "[1.12.1, )"
}
},
"imports": [
"net461",
"net462",
"net47",
"net471",
"net472",
"net48",
"net481"
],
"assetTargetFallback": true,
"warn": true,
"frameworkReferences": {
"Microsoft.NETCore.App": {
"privateAssets": "all"
}
},
"runtimeIdentifierGraphPath": "/usr/share/dotnet/sdk/8.0.411/PortableRuntimeIdentifierGraph.json"
}
}
}
}

View File

@@ -0,0 +1,10 @@
{
"version": 2,
"dgSpecHash": "+fP+6Qas+uQ=",
"success": true,
"projectFilePath": "/root/development/ramp-application/HiddenUrl/HiddenUrl.csproj",
"expectedPackageFiles": [
"/root/.nuget/packages/htmlagilitypack/1.12.1/htmlagilitypack.1.12.1.nupkg.sha512"
],
"logs": []
}