登录网站后如何获取HTML源代码?

时间:2018-08-07 18:39:33

标签: c# web-scraping

使用用户数据登录网站后,我试图获取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;
        }
    }
}

2 个答案:

答案 0 :(得分:0)

您的主要问题是,您将需要运行javascript来获取数据,而不能仅使用DownloadString等来执行此操作-也就是说,您需要模仿Web浏览器。我建议您获得一个gecko之类的浏览器组件,然后看看如何将数据发布到here中。然后,一旦下载列表并正确填写列表,就可以访问当前的html文档。

答案 1 :(得分:0)

登录

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

关键█值
凭证[电子邮件]█此处的电子邮件
凭证[密码]█这里的密码

发送此请求后,您将收到一个名为“ 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加载到页面上。这有两个选择,您可以使用AndriusNaruševičius建议的浏览器组件,也可以使用javascript使用的API。为了弄清楚API,您可以在浏览器的开发工具中使用“网络”标签。这种方法最初可能会更复杂,但最终,它应该更容易并且可以编写更清晰的代码,因为API旨在供人们(创建它的人)使用,而HTML并非旨在被解析,因为专为浏览器而不是人类开发。但是,根据您打算对服务器列表进行的操作,实际上使用Andrius的方法可能会更容易,因此,您必须自己做出决定。

如果您选择走我的路线怎么走

您可以了解chrome开发工具网络标签here并通过使用google来了解。您可以使用Postman之类的软件测试API调用。 如果您对Web请求/ API,Cookie和会话ID一无所知,则不应从此处开始,而应首先了解它们。要了解这一点,只需在Google上查找它们即可。