我需要在页面加载后发帖,但我使用的是线程
本文关键字:线程 加载 | 更新日期: 2023-09-27 18:31:29
我正在一个页面上做一篇文章,工作原理如下:单击链接并打开文本框,然后准确加载到另一个帖子以保存输入文本的内容。
遵循我正在使用的代码。
private void btnRobo_Click(object sender, EventArgs e)
{
// string[] paginasArray = new string[] { txtPaginas.Text };
string[] paginasArray = txtPaginas.Text.Split(''n');
foreach (string s in paginasArray)
{
// webBrowser1.Navigate(s);
if (s.Trim() != "")
runBrowserThread(new Uri(s));
}
}
private void runBrowserThread(Uri url)
{
var th = new Thread(() =>
{
var br = new WebBrowser();
br.DocumentCompleted += browser_DocumentCompleted;
br.Navigate(url);
Application.Run();
});
th.SetApartmentState(ApartmentState.STA);
th.Start();
}
void browser_DocumentCompleted(object sender, WebBrowserDocumentCompletedEventArgs e)
{
var br = sender as WebBrowser;
if (br.Url == e.Url)
{
Console.WriteLine("Natigated to {0}", e.Url);
webBrowser1.Navigate(e.Url);
//ExecutaPostagem();
HtmlElementCollection elements = br.Document.GetElementsByTagName("input");
foreach (HtmlElement currentElement in elements)
{
if ((currentElement.GetAttribute("type") == "submit") && (currentElement.Name == "view_post"))
{
string postagem = txtPublicacao.Text;
HtmlElement elea = br.Document.GetElementById("u_0_0");
if (elea != null) elea.SetAttribute("value", postagem);
currentElement.InvokeMember("click");
Thread.Sleep(1000);
fullyLoaded = false;
}
}
Application.ExitThread(); // Stops the thread
}
}
加载页面后,browser_DocumentCompleted需要运行下面的代码,但是如果我使用线程并且不再使用事件browser_DocumentCompleted,我将如何运行代码
var links = br.Document.GetElementsByTagName("A");
// var links = webBrowser1.Document.All;
foreach (HtmlElement link in links)
{
// if (link.InnerText != null)
if ((link.InnerText != null) && (link.InnerText.Contains("comentários")))
{
Thread.Sleep(1000);
MessageBox.Show(link.InnerText.ToString()); //.Contains("comentários").ToString());
//MessageBox.Show(link.GetAttribute("InnerText"));
// MessageBox.Show(link.GetAttribute("className"));
link.InvokeMember("click");
break;
}
}
根本不要使用 WebClient 或 Threads。请改用 http://restsharp.org/来调用您的网站。Restsharp非常容易使用。
而不是使用线程使用async/await(restsharp也支持这一点)稍后修改UI。