string url ="http://www.im286.com/thread-8387090-1-1.html"
SHDocVw.ShellWindows shellWindows = new SHDocVw.ShellWindowsClass();
object objFlags = 1;
object objTargetFrameName = "";
object objPostData = "";
object objHeaders = "";
SHDocVw.InternetExplorer webBrowser1 = (SHDocVw.InternetExplorer)shellWindows.Item(shellWindows.Count - 1);
webBrowser1.Navigate(url, ref objFlags, ref objTargetFrameName, ref objPostData, ref objHeaders);
mshtml.IHTMLDocument2 htmlDoc = webBrowser1.Document as mshtml.IHTMLDocument2;
mshtml.IHTMLElementCollection inputs;
inputs = (mshtml.IHTMLElementCollection)htmlDoc.all.tags("textarea");
mshtml.IHTMLElement element = (mshtml.IHTMLElement)inputs.item("fastpostmessage", 0);
mshtml.IHTMLInputElement inputElement = (mshtml.IHTMLInputElement)element;
inputElement.value = "填充信息";测试的时候,目标页面打开了,但是运行到最后一行出错,提示:未将对象引用设置到对象的实例。
目标页面的信息填写框的代码:<textarea rows="5" cols="80" name="message" id="fastpostmessage" onKeyDown="seditor_ctlent(event, 'fastpostvalidate($(\'fastpostform\'))');" tabindex="4" class="txtarea"></textarea>
<p><button type="submit" name="replysubmit" id="fastpostsubmit" value="replysubmit" tabindex="5">发表回复</button>如何才能查找到 id为fastpostmessage 这个文本框,然后输入值在点确定按钮呢?按钮id为fastpostsubmit
解决方案 »
- 请问这个 new[] 循环语句的写法,在线等/
- sql 数组循环
- 急救:关于C#2003和2005的一些区别的问题,怎样获取dataGridView控件的行的内容???
- 求救~~C#的picturebox的tag属性
- Page_Load 里动态生成RadioButtonList,如果在另一方法中调用(本人调用提示不存在)
- 使用SharpZipLib压缩文件,为什么大文件压缩不了呢?测试用的是2G大小的文件??
- 新手问题~~~
- 请问: netStream,memoryStream,strem三者之间如何转换,重点是:netStream与memoryStream之间如何互相转换?
- 接口有什么好处呢?在什么情况下应该使用接口?
- 有没有C#的环境下载!
- 入门者又来求助,怎样停止一个正在执行的函数
- 如何把pictureBox1里的图片数据赋给一个FileStream?
其实过程很简单,我现在遇到的难题就是在如何向打开的页面内填充内容,把这个问题解决了,东西就做好了
namespace 落伍回帖机
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
} private void button1_Click(object sender, EventArgs e)
{
//开始工作
String web = "http://www.im286.com/";
String url = textBox1.Text; //目标板块地址
String regstr = textBox2.Text; //正则
Int32 xhcs = 5; //循环次数5次
Int32 htjg = 60;//回帖间隔60秒
Int32 mljg = 10; //每轮间隔10分钟
String posttext = textBox5.Text;//回帖内容 if (url == "")
{
MessageBox.Show("目标板块地址有问题", "错误");
return;
}
if (regstr == "")
{
MessageBox.Show("正则必须填写", "错误");
return;
} for (Int32 i = 1; i <= xhcs; i++)
{
String html = getHtml(url);//得到源码
String lists = regurl(html, regstr);//得到帖子列表
String[] arr = lists.Split(',');
foreach (String k in arr.Skip(3)) //跳过置顶帖子
{
webBrowser.Visible = true;
//webBrowser.Navigate(web + k.ToString(), false);
webBrowser.Navigate("http://www.im286.com/thread-8393716-1-1.html", false);
while (webBrowser.ReadyState != WebBrowserReadyState.Complete)
{
//MessageBox.Show("网页还没加载完");
}
//网页加载完毕,回帖
} } } /// <summary>
/// 获取指定网页的源文件
/// </summary>
/// <param name="url">网页url</param>
/// <returns>网页源码</returns>
private string getHtml(string url)
{
try
{
WebClient myWebClient = new WebClient();
byte[] myDataBuffer = myWebClient.DownloadData(url);
return Encoding.Default.GetString(myDataBuffer);
}
catch (Exception ex)
{
MessageBox.Show(ex.Message);
throw;
}
}
/// <summary>
/// 提取列表地址
/// </summary>
/// <param name="str">源码</param>
/// <param name="reg1">正则</param>
/// <returns>返回帖子地址</returns>
public String regurl(string str, string reg1)
{
Regex reg = new Regex(reg1, RegexOptions.IgnoreCase);
MatchCollection mc = reg.Matches(str);
String list = String.Empty;
foreach (Match m in mc)
{
list = list + m.Value + ",";
}
return list;
} private void button2_Click(object sender, EventArgs e)
{
//停止工作
} }
}
其实验证码可以在访问的同时直接读取的,
当然,前提是在保持当前的session或cookie的前提下。
{ String html = getHtml(url);//得到源码
String lists = regurl(html, regstr);//得到帖子列表
label10.Text = "得到帖子列表,准备回帖...";
String[] arr = lists.Split(',');
foreach (String k in arr.Skip(3)) //跳过置顶帖子
{
webBrowser.Visible = true;
webBrowser.Navigate(web + k.ToString(), false);
// webBrowser.Navigate("http://www.im286.com/thread-8393716-1-1.html", false);//这里一定要flase才行
while (webBrowser.ReadyState != WebBrowserReadyState.Complete)
{
//MessageBox.Show("网页还没加载完");
label10.Text = "正在打开目标网页...";
}
//网页加载完毕,回帖
HtmlDocument htmlDoc = webBrowser.Document;
HtmlElement input = htmlDoc.All["fastpostmessage"];
HtmlElement submit = htmlDoc.All["fastpostsubmit"];
if (input != null)
{
//MessageBox.Show("找到控件了");
input.InnerHtml = posttext;
submit.InvokeMember("click");
DateTime sj = DateTime.Now;
label10.Text = sj + " 发布成功了";
Thread.Sleep(htjg);//回1帖以后暂停时间
}
else
{
//没有找到文本输入框
MessageBox.Show("没有找到文本输入框,可能的原因为:\n\n1、你没有登录或者ie没有保存登录状态;\n\n2、你登录的帐号在当前设置板块没有回帖权限。");
//return;
label10.Text = "发布失败,请检查原因";
return;
} }
label10.Text = " 一轮发完了,正在进行" + mljg + "间隔,无需操作";
Thread.Sleep(mljg * 60 * 1000);//每一轮完成后暂停时间
}