首页 > 解决方案 > 登录网站后如何获取html源代码?

问题描述

在使用用户数据登录网站后,我试图获取 html 源代码,但它没有给我 html 源代码。那么我的源代码中的问题在哪里?在网站上,它在登录“lobby.ogame.gameforge.com/?language=tr”后将我重定向到服务器选择页面;我正在尝试获取此页面的 html 源代码。

public partial class Form1 : Form
{
    public Form1()
    {
        InitializeComponent();
    }

    private void Form1_Load(object sender, EventArgs e)
    {

    }

    private void button1_Click(object sender, EventArgs e)
    {
        string URI = "https://tr.ogame.gameforge.com/";
        string myParameters = "login=testusername&pass=testpassword";

        using (WebClient wc = new WebClient())
        {
            wc.Headers[HttpRequestHeader.ContentType] = "application/x-www-form-urlencoded";
            string HtmlResult = wc.UploadString(URI, myParameters);
            richTextBox1.Text = HtmlResult;
        }
    }
}

标签: c#web-scraping

解决方案


在登录

我查看了该网站及其登录系统的工作原理,您对它的工作原理做出了一些不正确的假设。您登录此特定网站的方式是向“ https://lobby-api.ogame.gameforge.com/users ”发送请求并以“application/x-www-form-urlencoded”格式为其提供数据. 所需数据如下表所示:

Key █ Value
credentials[email] █ 这里的 email
credentials[password] █ 这里的密码

发送此请求后,您将收到一个名为“PHPSESSID”的 cookie。您可以使用此 cookie 发出后续请求,例如,向“ https://lobby.ogame.gameforge.com/?language=tr ”页面你试图去“index.php”时

更多问题

但是,一旦您加载此页面并呈现 HTML,您会发现它不包含任何有趣的东西,例如您所追求的服务器。这是HTML:

<!doctype html>
<html lang="en">
   <head>
      <meta charset="utf-8">
      <meta name="viewport" content="width=device-width,initial-scale=1,shrink-to-fit=no">
      <meta name="theme-color" content="#000000">
      <link rel="shortcut icon" href="/favicon.ico">
      <script type="text/javascript" src="/config/configuration.js"></script>
      <title>OGame Lobby</title>
      <link href="https://s3-static.geo.gfsrv.net/browsergamelobby/ogame/1.0.8/css/main.2e4c281d.css" rel="stylesheet">
   </head>
   <body>
      <noscript>You need to enable JavaScript to run this app.</noscript>
      <div id="root"></div>
      <div class="planet"></div>
      <script type="text/javascript" src="https://s3-static.geo.gfsrv.net/browsergamelobby/ogame/1.0.8/js/main.edde2ed8.js"></script>
   </body>
</html>

javascript 然后加载使页面上的东西。这给您留下了两个选择,您可以使用 Andrius Naruševičius 建议的浏览器组件,也可以使用 javascript 使用的 API。为了找出 API,您可以使用浏览器开发工具中的网络选项卡。这种方式最初可能更复杂,但最终,它应该更容易并且代码更简洁,因为 API 旨在供人们(制作它的人)使用,但 HTML 不是为了解析而设计的,因为它是为浏览器制作,而不是人类。但是,根据您打算如何处理服务器列表,使用 Andrius 的方式实际上可能更容易,您必须自己做出决定。

如果你选择走我的路怎么走

您可以在此处和使用 google(显然)了解 chrome 开发工具网络选项卡。您可以使用Postman等软件测试您的 API 调用。如果您对 Web 请求/API、cookie 和会话 ID 一无所知,您不应该从这里开始,您应该首先了解它们是什么。要了解这一点,只需在 Google 上查找它们。


推荐阅读