希望能实现的用途:
用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);
}
}
}
}