如何使用后台asp.net c#的angular网站读取其他网站数据



我正在尝试使用后端为asp.net c#的angular网站读取其他网站的数据,其他网站在登录后有以下登录验证需要读取数据。

我有以下真实的页面

  1. 第一页我必须输入用户名

https://i.stack.imgur.com/PgbLo.png

  1. 第二页我必须输入密码,然后单击登录

https://i.stack.imgur.com/xAr4E.png

  1. 登录后将重定向到个人详细信息的主页

https://i.stack.imgur.com/2I4UX.png

我需要在我的角度网站中显示第三点页面信息名称、手机和地址。

第三页的网址如下:www.xyz.com/1

url中的以上1位是基于第三页id信息的信息的id将出现

我发现一些使用c#的代码,但如何管理登录

System.Net.WebClient wc = new System.Net.WebClient();
byte[] raw = wc.DownloadData("http://www.yoursite.com/resource/file.htm");
string webData = System.Text.Encoding.UTF8.GetString(raw);

和其他方式

System.Net.WebClient wc = new System.Net.WebClient();
string webData = 
wc.DownloadString("http://www.yoursite.com/resource/file.htm");
System.Net.WebClient wc = new System.Net.WebClient();

我建议检查您想要获取数据的网站是否有公共的API(更容易调用,并且有可能该网站有"无机器人"政策,您的IP可能会被禁止(

话虽如此,如果你想自动登录网站并获取数据,你需要使用类似Selenium的东西(不是这方面的专家,但我可以给你一个文档链接(

https://www.javatpoint.com/selenium-csharp

Selenium通常用于自动化测试,但它允许您模拟用户与站点的交互(查找字段输入并键入值(。

不需要获取信息,我过去使用HtmlAgilityPack,它是一个C#库,允许您在网站中查找特定元素(使用XPath,很容易学习(。

https://html-agility-pack.net/

他们有一些很棒的文档,当你从网站上获得结果后,你可以使用API公开它,你可以从你的angular应用程序中使用它。

Like Facundo Gallardo表示,从网站获取数据的最佳方式是使用网站的API(如果有(。不幸的是,如果没有,你就无能为力。

如果你正在构建一个桌面应用程序,使用像selenium这样的网络浏览器模拟器可能是一种选择,但对于服务器来说,这太耗费资源了。如果你要使用它(我甚至不确定你能在服务器环境中使用(,你的服务器必须为每个用户打开一个新的浏览器,比如chrome,每次你想从其他网站上删除数据时。

任何其他不需要打开完整浏览器的解决方案都只能丢弃不需要身份验证就能看到的静态数据

您可以使用python脚本来完成此操作。准备一个python脚本来自动登录,并在c#中使用相同的脚本来完成该过程。

这里有两个链接可供参考,可能会有所帮助。

使用python 提交网络表单

在c#中运行python脚本

为了实现某些Webui的自动化,您需要使用以下内容https://www.puppeteersharp.com/。

您可以在浏览器中手动完成的大多数事情都可以使用Puppeter完成!

给定类似的登录屏幕

<!DOCTYPE html>
<html>
<body>
<form action="/action_page.php">
<label for="name">name:</label><br>
<input type="text" id="name" name="name"><br>
<label for="password">password:</label><br>
<input type="password" id="password" name="password"><br><br>
<input type="submit" value="Submit">
</form>
</body>
</html>

登录挑战的.net代码看起来像

using PuppeteerSharp;
//Setup puppeteer things
using var browserFetcher = new BrowserFetcher();
await browserFetcher.DownloadAsync();
await using var browser = await Puppeteer.LaunchAsync(new LaunchOptions { Headless = false });
await using var page = await browser.NewPageAsync();
//Using https://jsfiddle.net/hwu6bkj0/ as demo web form
await page.GoToAsync("https://jsfiddle.net/hwu6bkj0/");
//Wait for your input element to appear/get loaded. Use the F12/Dev tools of your browser to find out the right query
await Task.Delay(1000);
// JsFiddle specific - getting result iframe
var frameElement = await page.QuerySelectorAsync("iframe[name='result']");
var frame = await frameElement.ContentFrameAsync();
var frameContent = await frame.GetContentAsync();
// Setting values to the input elements
var usenanme = await frame.QuerySelectorAsync("input[name='name']");
await usenanme.TypeAsync("testUserName");
var passsword = await frame.QuerySelectorAsync("input[name='password']");
await passsword.TypeAsync("pa$$word");
var submitButton = await frame.QuerySelectorAsync("input[type='submit']");
await Task.Delay(1000);
await submitButton.ClickAsync();
await Task.Delay(5000);

Headless将被设置为true;任务延迟";s应在最终版本中删除。

下面的每一种形式都应该类似。

最新更新