Mukesh Pr@sad Ответов: 1

Как читать содержимое div с веб-страницы ?


Привет эксперты,

Я разработал приложение windows form. С помощью этого приложения я открываю веб-сайт. Этот веб-сайт используется для поиска данных пользователя на основе его фамилии и даты рождения. Мое приложение автоматически открывает веб-сайт. размещение фамилии и даты рождения пользователя в соответствующих текстовых полях. После этого нажимаем кнопку поиска и получаем результат.

Проблема: после получения результата на веб-странице Я должен прочитать некоторые данные со страницы. Этот результат приходит в div. Итак, как получить этот контент div.

Любая помощь будет оценена по достоинству..!

Что я уже пробовал:

<pre>using System;
using System.Drawing;
using System.Collections;
using System.ComponentModel;
using System.Windows.Forms;
using System.Data;
using mshtml;
using System.Collections.Generic;
using System.Configuration;
using System.IO;
using System.Text;
using System.Net;

namespace mshtml_automation_demo
{
	/// <summary>
	/// Summary description for Form1.
	/// </summary>
	public class MainForm : System.Windows.Forms.Form
	{
		private AxSHDocVw.AxWebBrowser axWebBrowser1;
		private int Task = 1; // global

		/// <summary>
		/// Required designer variable.
		/// </summary>
		private System.ComponentModel.Container components = null;

		public MainForm()
		{
			//
			// Required for Windows Form Designer support
			//
			InitializeComponent();

			//
			// TODO: Add any constructor code after InitializeComponent call
			//
		}

		/// <summary>
		/// Clean up any resources being used.
		/// </summary>
		protected override void Dispose( bool disposing )
		{
			if( disposing )
			{
				if (components != null) 
				{
					components.Dispose();
				}
			}
			base.Dispose( disposing );
		}

		#region Windows Form Designer generated code
		/// <summary>
		/// Required method for Designer support - do not modify
		/// the contents of this method with the code editor.
		/// </summary>
		private void InitializeComponent()
		{
			System.Resources.ResourceManager resources = new System.Resources.ResourceManager(typeof(MainForm));
			this.axWebBrowser1 = new AxSHDocVw.AxWebBrowser();
			((System.ComponentModel.ISupportInitialize)(this.axWebBrowser1)).BeginInit();
			this.SuspendLayout();
			// 
			// axWebBrowser1
			// 
			this.axWebBrowser1.Dock = System.Windows.Forms.DockStyle.Fill;
			this.axWebBrowser1.Enabled = true;
			this.axWebBrowser1.Location = new System.Drawing.Point(0, 0);
			this.axWebBrowser1.OcxState = ((System.Windows.Forms.AxHost.State)(resources.GetObject("axWebBrowser1.OcxState")));
			this.axWebBrowser1.Size = new System.Drawing.Size(616, 382);
			this.axWebBrowser1.TabIndex = 0;
			this.axWebBrowser1.DocumentComplete += new AxSHDocVw.DWebBrowserEvents2_DocumentCompleteEventHandler(this.axWebBrowser1_DocumentComplete);
			// 
			// MainForm
			// 
			this.AutoScaleBaseSize = new System.Drawing.Size(5, 13);
			this.ClientSize = new System.Drawing.Size(616, 382);
			this.Controls.Add(this.axWebBrowser1);
			this.Name = "MainForm";
			this.Text = "Microsoft WebBrowser Automation";
			this.Load += new System.EventHandler(this.FrmMain_Load);
			((System.ComponentModel.ISupportInitialize)(this.axWebBrowser1)).EndInit();
			this.ResumeLayout(false);

		}
		#endregion

		/// <summary>
		/// The main entry point for the application.
		/// </summary>
		[STAThread]
		static void Main() 
		{
			Application.Run(new MainForm());
		}

		private void FrmMain_Load(object sender, System.EventArgs e)
		{
            object loc = "https://www.vca.ssvv.nl/";
			object null_obj_str = "";
			System.Object null_obj = 0;
			this.axWebBrowser1.Navigate2(ref loc , ref null_obj, ref null_obj, ref null_obj_str, ref null_obj_str);
		}
        public static void OutputText(string VcaTypeExpDate)
        {
            string output = "C:\\Export\\Temp\\Logs\\";
            //string output = "C:\\Export\\Raildocs\\Logs\\";
            // string output = "F:\\Test_Cord\\Log\\";
            StreamWriter Res;
            FileStream fileStream = null;
            DirectoryInfo logDirInfo = null;
            FileInfo logFileInfo;
            var ResFilePath = output;
            ResFilePath = ResFilePath + "Result.txt";
            logFileInfo = new FileInfo(ResFilePath);
            logDirInfo = new DirectoryInfo(logFileInfo.DirectoryName);
            if (!logDirInfo.Exists) logDirInfo.Create();
            if (!logFileInfo.Exists)
            {
                fileStream = logFileInfo.Create();
            }
            else
            {
                fileStream = new FileStream(ResFilePath, FileMode.Append);
            }
            Res = new StreamWriter(fileStream);
            Res.WriteLine(VcaTypeExpDate);
            Res.Close();
        }

		private void axWebBrowser1_DocumentComplete(object sender, AxSHDocVw.DWebBrowserEvents2_DocumentCompleteEvent e)
		{
            List<string> CVList = new List<string>();
            string inputCV = ConfigurationManager.AppSettings["inputFile"];
            string outputCV = ConfigurationManager.AppSettings["outputFile"];
            string[] lines = File.ReadAllLines(inputCV, Encoding.UTF8);
            foreach (var item in lines)
            {
                string CVData = item.ToString().Replace('@', ' ');
                CVList.Add(CVData);

            }
            foreach(var item in CVList)
            {
                string[] cvData = item.Split(',');
                switch(Task)
			{
				case 1:

					HTMLDocument myDoc = new HTMLDocumentClass();
					myDoc = (HTMLDocument) axWebBrowser1.Document;

					// a quick look at the google html source reveals: 
					// <INPUT maxLength="256" size="55" name="q">
					//
                    HTMLInputElement otxtSearchBox = (HTMLInputElement)myDoc.all.item("ctl00_ContentPlaceHolder1_ctl00_txtAchternaam", 0);

                    otxtSearchBox.value = cvData[0].ToString();

                    HTMLInputElement dtxtSearchBox = (HTMLInputElement)myDoc.all.item("ctl00_ContentPlaceHolder1_ctl00_txtGeboortedatum", 0);

                     dtxtSearchBox.value = cvData[1].ToString();

					// google html source for the I'm Feeling Lucky Button:
					// <INPUT type=submit value="I'm Feeling Lucky" name=btnI>
					//
                    HTMLInputElement btnSearch = (HTMLInputElement)myDoc.all.item("ctl00_ContentPlaceHolder1_ctl00_cmdOpvragen", 0);
					btnSearch.click();
                   



					Task++;

                        // write to text file 


					break;

				case 2:

					// continuation of automated tasks...
					break;
			}
            }
            MessageBox.Show("Operation Completed...!");
			
		}
	}
}

1 Ответов

Рейтинг:
2

Wessel Beulink

Используйте HTMLDocument вы можете прочитать все функции, которые вам нужны: htmldocument на сайте MSDN

Вы можете использовать

mydoc.GetElementById(String)

Или
mydoc.GetElementsByTagName(String)


Поэтому для получения результата вам нужно знать элемент по идентификатору. Если вы не знаете ide элемента, который ищете, просто используйте функцию string и find/replace в c# и примените ее с помощью mydoc.Запись(Строка). Вы можете применить изменения с помощью
mydoc.CreateElement(String)
mydoc.Write(String)



пробовать:
string urlAddress = "http://google.com.ssvv.nl/";
var doc = new HtmlDocument();

using (WebClient client = new WebClient())
{
    string htmlCode = client.DownloadString(urlAddress);
    doc.LoadHtml(htmlCode);
}


//do whatever you want with the doc
doc.GetElementById('youId')


Кроме того, если вы хотите более стабильное решение, вам нужно проверить этот проект htmlAgile: htmlagilitypack у него было больше возможностей. Но чтобы комплекс просто записать сюда, вы обязательно должны его проверить.


Mukesh Pr@sad

Он дает нулевое значение ...не то точное значение, которое я хочу.
после нажатия кнопки я получаю результат, который мне нужно захватить.
Но код, который вы предложили, все еще проверяет пустую страницу, Я имею в виду до нажатия кнопки, а не после нажатия кнопки.

Wessel Beulink

Я обновил решение для вас, надеюсь, что это сработает для вас