GetElementById不起作用。也许转换UTF-16?

时间:2017-10-25 19:02:46

标签: c# utf-8 utf-16

大家好我的代码有以下问题,应该自动将我登录到网站https://app.xyz.com/LoginEntry.aspx

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;

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

        private void loggy_DocumentCompleted(object sender, WebBrowserDocumentCompletedEventArgs e)
        {



            try
            {

                HtmlDocument doc = loggy.Document;
                HtmlDocument username = doc.GetElementById("wtLayoutLogin_SilkUIFramework_wt8_block_wtUsername_wtUsername_wtUsernameInput");
                HtmlDocument password = doc.GetElementById("wtLayoutLogin_SilkUIFramework_wt8_block_wtPassword_wtPassword_wtPasswordInput");
                HtmlDocument submit = doc.GetElementById("wtLayoutLogin_SilkUIFramework_wt8_block_wtAction_wtAction_wtLoginButton");

                username.SetAttribute("value", "jon.doe@gmail.com");
                password.SetAttribute("value", "123");
                submit.InvokeMember("click");
            }

                catch
            {

            }


        }
    }
    }

检查登录字段向我显示以下内容:

<input name="wtLayoutLogin$SilkUIFramework_wt8$block$wtUsername$wtUsername$wtUserNameInput" type="text" maxlength="250" size="28" id="wtLayoutLogin_SilkUIFramework_wt8_block_wtUsername_wtUsername_wtUserNameInput" tabindex="2" class="Mandatory" placeholder="Email or Username" onkeydown="return OsEnterKey('wtLayoutLogin_SilkUIFramework_wt8_block_wtAction_wtAction_wtLoginButton', arguments[0] || window.event)" autofocus="autofocus">

我无法使用“GetElementById”。我在C#方面不是很有经验,我不知道如何转换文本以便它可用。

有人可以帮帮我吗?

1 个答案:

答案 0 :(得分:1)

事实证明,在进一步查看之前,我应该确切地问你“我不能使用”GetElementById“”。让我成为一个教训。

问题是HtmlDocument.GetElementById()会返回HtmlElement,而不是HtmlDocument。您的代码将无法编译,因为您尝试进行的操作是不可能的(也不是可取的)。

这将有效:

var username = doc.GetElementById("wtLayoutLogin_SilkUIFramework_wt8_block_wtUsername_wtUsername_wtUsernameInput");
var password = doc.GetElementById("wtLayoutLogin_SilkUIFramework_wt8_block_wtPassword_wtPassword_wtPasswordInput");
var submit = doc.GetElementById("wtLayoutLogin_SilkUIFramework_wt8_block_wtAction_wtAction_wtLoginButton");

或者

HtmlElement username = doc.GetElementById("wtLayoutLogin_SilkUIFramework_wt8_block_wtUsername_wtUsername_wtUsernameInput");
HtmlElement password = doc.GetElementById("wtLayoutLogin_SilkUIFramework_wt8_block_wtPassword_wtPassword_wtPasswordInput");
HtmlElement submit = doc.GetElementById("wtLayoutLogin_SilkUIFramework_wt8_block_wtAction_wtAction_wtLoginButton");

所有var确实将变量定义为您尝试分配给它的任何类型。 HtmlDocument.GetElementById()is declared as returning HtmlElement , so if you hover the mouse over var in those lines, it'll tell you that HtmlElement is the actual type of用户名`或者其他什么。

jon.doe@gmail.com现在可以承担太阳战士的姿势了。