C#+selenium,操作当前浏览器,并用mySQL记录脚本,便于后期要制作的应用使用

希望能实现的用途:
用C#操作浏览器,记录操作和调试的过程,然后把数据储存在mySQl数据库中.便于下一阶段要做的应用使用.

  • 设置Chrome 启动参数:右键桌面快捷方式-属性

–remote-debugging-port=9222

在这里插入图片描述

  • 下载对应版本的chromedriver.exe,放在安装目录下

在这里插入图片描述

  • 新建win32桌面应用.Nuget添加引用,selenium.WebDriver和selenium.WebDriver.ChromDriver.
    注意selenium.WebDriver.ChromDriver要选对应版本的.

在这里插入图片描述

  • 安装mysql.data引用

在这里插入图片描述

  • 本次的脚本主要针对一些自媒体平台,希望能做到自动发文,所以设计数据库如下:
    在这里插入图片描述
  • 设计界面如下:
    在这里插入图片描述
  • 点击快捷方式打开Chrome,并用selenium控制打开的浏览器:
 IWebDriver wd = new ChromeDriver(@"C:\Users\Administrator\AppData\Local\google\Chrome\Application", new ChromeOptions() { DebuggerAddress = "localhost:9222" });
  • 新建一个Dbcon类,实现数据库增删改查.

  • 新建方法:zhixing,实现selenium读取数据并执行.

  • 新建方法:dengdai,在zhixing的过程中,用来处理错误信息.

  • 一些代码如下.后面需要把zhixing,dengdai两个拎出来再做.

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;
using MySql.Data.MySqlClient;
using MySql.Data;
using OpenQA.Selenium;
using OpenQA.Selenium.Chrome;
using System.Threading;



namespace Jiaobenshujuk
{
    public partial class Form1 : Form
    {
        public List<Dbdata> litemp = new List<Dbdata>();
        public Dbdata dbmorenzhi = new Dbdata()
        {
            id = "1",
            c1 = "1",
            c2 = "1",
            c3 = "1",
            d1 = "1",
            d2 = "1",
            d3 = "1",
            e = "1",
            f = "1",
            f2 = "1"
        };
        IWebDriver wd = new ChromeDriver(@"C:\Users\Administrator\AppData\Local\google\Chrome\Application", new ChromeOptions() { DebuggerAddress = "localhost:9222" });


        public Form1()
        {
            InitializeComponent();
        }

        private void Form1_Load(object sender, EventArgs e)
        {
            Dbcon db = new Dbcon(textBox1.Text, textBox2.Text, textBox3.Text, textBox4.Text, textBox5.Text, textBox6.Text);
            litemp.Clear();
            litemp.Add(db.li[0]);
            button1_Click(null, null);   
        }

        private void button1_Click(object sender, EventArgs e)
        {
            Dbcon db = new Dbcon(textBox1.Text, textBox2.Text, textBox3.Text, textBox4.Text, textBox5.Text, textBox6.Text);
            
            if (db.connzt)
            {
                toolStripStatusLabel3.Text = "数据库连接成功!";
                dataGridView1.AutoGenerateColumns = false;
                dataGridView1.DataSource = null;
                dataGridView1.DataSource = db.li;
            }
            else
            {
                toolStripStatusLabel3.Text = "数据库连接失败!";
            }

        }

        public class Dbdata
        {
            public string id { get; set; }
            public string c1 { get; set; }
            public string c2 { get; set; }
            public string c3 { get; set; }
            public string d1 { get; set; }
            public string d2 { get; set; }
            public string d3 { get; set; }
            public string e { get; set; }
            public string f { get; set; }
            public string f2 { get; set; }
        }




        public class Dbcon
        {
            public string constr;
            public bool connzt = false;
            public List<Dbdata> li = new List<Dbdata>();
            public Dbcon(string serv, string port, string user, string pw, string dabase, string dl)
            {
                this.constr = "server=" + serv + ";port=" + port + ";user=" + user + ";password=" + pw + "; database=" + dabase + ";";
                MySqlConnection mco = new MySqlConnection(this.constr);
                try
                {
                    mco.Open();
                    this.connzt = true;
                }
                catch (Exception) { }
                if (connzt)
                {
                    string sql = "SELECT * FROM `jiaoben` WHERE `f` = " + dl + " "+ "ORDER BY `f2` ASC";
                    MySqlCommand cmd = new MySqlCommand(sql, mco);
                    MySqlDataReader reader = cmd.ExecuteReader();

                    while (reader.Read())
                    {
                        li.Add(new Dbdata() { id = reader[0].ToString(), c1 = reader[1].ToString(), c2 = reader[2].ToString(), c3 = reader[3].ToString(), d1 = reader[4].ToString(), d2 = reader[5].ToString(), d3 = reader[6].ToString(), e = reader[7].ToString(), f = reader[8].ToString(), f2 = reader[9].ToString() });
                    }
                    mco.Close();
                }
            }

            public Dbcon(string serv, string port, string user, string pw, string dabase, Dbdata db)
            {
                this.constr = "server=" + serv + ";port=" + port + ";user=" + user + ";password=" + pw + "; database=" + dabase + ";";
                MySqlConnection mco = new MySqlConnection(this.constr);
                mco.Open();
                string sql = "INSERT INTO `jiaoben` (`id`, `c1`, `c2`, `c3`, `d1`, `d2`, `d3`, `e`, `f`, `f2`) VALUES (NULL, '" + db.c1 + "', '" + db.c2 + "', '" + Convert.ToInt32(db.c3) + "', '" + db.d1 + "', '" + db.d2 + "', '" + db.d3 + "', '" + Convert.ToInt32(db.e) + "', '" + Convert.ToInt32(db.f) + "', '" + Convert.ToInt32(db.f2) + "');";
                MySqlCommand cmd = new MySqlCommand(sql, mco);
                int result = cmd.ExecuteNonQuery();
                mco.Close();
            }

            public Dbcon(string serv, string port, string user, string pw, string dabase, int i, string sql)
            {
                this.constr = "server=" + serv + ";port=" + port + ";user=" + user + ";password=" + pw + "; database=" + dabase + ";";
                MySqlConnection mco = new MySqlConnection(this.constr);
                mco.Open();
                MySqlCommand cmd = new MySqlCommand(sql, mco);
                int result = cmd.ExecuteNonQuery();

                mco.Close();
            }

        }

        private void dataGridView1_CellValueChanged(object sender, DataGridViewCellEventArgs e)
        {

        }

        private void dataGridView1_CellClick(object sender, DataGridViewCellEventArgs e)
        {
            litemp.Clear();
            Dbdata tempdb = dataGridView1.CurrentRow.DataBoundItem as Dbdata;
            litemp.Add(tempdb);
            if (litemp[0].id != null)
            {
                toolStripStatusLabel3.Text = "当前选择的数据行id:" + litemp[0].id;
            }
        }

        private void groupBox1_Enter(object sender, EventArgs e)
        {

        }

        private void button4_Click(object sender, EventArgs e)
        {
            Dbcon db = new Dbcon(textBox1.Text, textBox2.Text, textBox3.Text, textBox4.Text, textBox5.Text, dbmorenzhi);
            button1_Click(null, null);
        }


        //删除当前行
        private void button5_Click(object sender, EventArgs e)
        {
            //DELETE FROM `jiaoben` WHERE `jiaoben`.`id` = 3
            toolStripStatusLabel3.Text = litemp.Count.ToString();
            litemp.Clear();
            Dbdata tempdb = dataGridView1.CurrentRow.DataBoundItem as Dbdata;
            litemp.Add(tempdb);
            string delstr = "DELETE FROM `jiaoben` WHERE `jiaoben`.`id` = " + litemp[0].id + ";";
            Dbcon db = new Dbcon(textBox1.Text, textBox2.Text, textBox3.Text, textBox4.Text, textBox5.Text, 1, delstr);
            button1_Click(null, null);
        }

        private void button2_Click(object sender, EventArgs e)
        {
            button2.Enabled = false;
            try
            {
                toolStripStatusLabel3.Text = wd.Title+"正在执行当前行";
            }
            catch (Exception) { }
            zhixing(litemp[0]);
            button2.Enabled = true;
            toolStripStatusLabel3.Text = "当前行执行完毕!";

        }

        private void zhixing(Dbdata dbdata)
        {
            switch (dbdata.c1)
            {
                case "nav":
                    wd.Navigate().GoToUrl(dbdata.c2);
                    //dengdai(dbdata);
                    break;
                case "tag":
                    break;
                case "class":
                    break;
                case "id":
                    break;
                case "js":
                    break;
                default:
                    break;
            }
        }

        private void dengdai(Dbdata dbdata)
        {
            long sj = DateTime.Now.Millisecond;
            bool tuichu = false;
            IWebElement temp;
            while ((DateTime.Now.Millisecond - sj) < (Convert.ToInt32(dbdata.e)))
            {
                try
                {
                    switch (dbdata.d1)
                    {
                        case "tag":
                            temp = wd.FindElements(By.TagName(dbdata.c2))[Convert.ToInt32(dbdata.d3)];
                            tuichu = true;
                            break;
                        case "class":
                            temp = wd.FindElements(By.ClassName(dbdata.c2))[Convert.ToInt32(dbdata.d3)];
                            tuichu = true;
                            break;
                        default:
                            break;
                    }
                    if (tuichu)
                    {
                        break;
                    }
                }
                catch (Exception) { }
                finally
                {
                    Thread.Sleep(500);
                }

            }
        }

        private void button6_Click(object sender, EventArgs e)
        {
            //UPDATE `jiaoben` SET `c1` = '131', `c2` = '122', `c3` = '13', `d1` = '1488', `d2` = '1313145', `d3` = '14146', `e` = '11117', `f` = '166', `f2` = '1222' WHERE `jiaoben`.`id` = 35; 
            toolStripStatusLabel3.Text = litemp.Count.ToString();
            litemp.Clear();
            Dbdata tempdb = dataGridView1.CurrentRow.DataBoundItem as Dbdata;
            litemp.Add(tempdb);
            string delstr = "UPDATE `jiaoben` SET `c1` = '" + litemp[0].c1 + "', `c2` = '" + litemp[0].c2 + "', `c3` = '" + litemp[0].c3 + "', `d1` = '" + litemp[0].d1 + "', `d2` = '" + litemp[0].d2 + "', `d3` = '" + litemp[0].d3 + "', `e` = '" + litemp[0].e + "', `f` = '" + litemp[0].f + "', `f2` = '" + litemp[0].f2 + "' WHERE `jiaoben`.`id` = " + litemp[0].id + ";";
            Dbcon db = new Dbcon(textBox1.Text, textBox2.Text, textBox3.Text, textBox4.Text, textBox5.Text, 1, delstr);
            button1_Click(null, null);
        }

        private void button3_Click(object sender, EventArgs e)
        {
            litemp.Clear();
            Dbdata temp;
            foreach( DataGridViewRow row1 in dataGridView1.Rows)
            {
                temp = row1.DataBoundItem as Dbdata;
                litemp.Add(temp);
            }
            foreach(Dbdata i in litemp)
            {
                zhixing(i);
            }
        }
    }
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值