【问题标题】:How to run GeckoFx "GetElementById" funtion in C#?如何在 C# 中运行 GeckoFx“GetElementById”函数?
【发布时间】:2016-02-11 16:44:55
【问题描述】:

我最近开始了一个新项目,它与默认的 Visual Studio 2015“webBrowser”一起正常工作。不幸的是,默认浏览器不支持我需要它运行的一些网络元素。因此,我决定寻找可以运行这些元素的浏览器替代方案。

在做了一些研究后,我决定使用 GeckoFx,主要是因为我读到它的命令功能与原始 webBrowser 的工作方式非常相似(命令如 GetElementById)。

我正在尝试创建一个让我自动登录到“login.live.com”的程序。我不知道为什么,但是当它运行代码时,“密码”值输入接缝工作,但电子邮件没有。请帮我找出原因!

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 XLP_2_11_16__2_
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
        //This is not the actual folder location. Part of it was suppstituded by "..." for safety reasons.
            Gecko.Xpcom.Initialize(@"C:\...\bin\Debug\xulrunner");
        }

        private void Form1_Load(object sender, EventArgs e)
        {
            geckoWebBrowser1.Navigate("https://login.live.com");
        }

        private void button1_Click(object sender, EventArgs e)
        {
        //Actual email and password was substituted for safety reasons.
            string email = "myemail@email.com";
            string pass = "mypassword";

            geckoWebBrowser1.Document.GetElementById("i0116").SetAttribute("value", email);
            geckoWebBrowser1.Document.GetElementById("i0118").SetAttribute("value", pass);
            geckoWebBrowser1.Navigate("javascript:void(document.forms[0].submit())");
        }

        private void geckoWebBrowser1_Click(object sender, EventArgs e)
        {

        }

        private void geckoWebBrowser1_DocumentCompleted(object sender, Gecko.Events.GeckoDocumentCompletedEventArgs e)
        {

        }

        public void Delayed(int delay, Action action)
        {
            Timer timer = new Timer();
            timer.Interval = delay;
            timer.Tick += (s, e) => {
                action();
                timer.Stop();
            };
            timer.Start();
        }
    }
}

这是表单设计:

如果有人知道更好的方法,请告诉我 请帮忙!!

【问题讨论】:

    标签: javascript c# visual-studio-2015 geckofx


    【解决方案1】:

    我能够复制您目睹的行为。我相信这是因为输入字段类型是触发验证的“电子邮件”。我能够使用 Gecko.DOM 模块中的 GeckoInputElement 类型填充该字段。

    以下代码适用于我:

    var emailField = new Gecko.DOM.GeckoInputElement(geckoWebBrowser1.Document.GetHtmlElementById("i0116").DomObject);
    emailField.Value = @"test@test.com";
    
    var passwordField = new Gecko.DOM.GeckoInputElement(geckoWebBrowser1.Document.GetHtmlElementById("i0118").DomObject);
    passwordField.Value = @"test_password";
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2015-08-03
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-07-23
      • 2017-05-06
      相关资源
      最近更新 更多