我正在制作一个自动以批量形式重新发布Craigslist帖子的程序。
我正在执行一个名为arrayTest()
的方法,其中包含一行webBrowser1.Navigate(urls[i]);
。这将从数组中获取一个URL并让webBrowser1
打开它。执行该操作后,将调用clickRepost();
方法。此方法模拟按钮单击。但该方法在webBrowser1
完成打开URL之前执行。
我需要帮助的是告诉程序等待webBrowser1
完成打开URL,然后再转到下一个方法。
到目前为止我尝试了什么:
Task t = Task.Run(() => {
webBrowser1.Navigate(urls[i]);
})
t.wait();
clickRepost();
这仍然导致clickRepost()
不允许webBrowser1
完成加载网址。我还尝试在调用方法之间添加System.Threading.Thread.Sleep(5000)
,但是在Java中这样做,它只关闭x-Seconds的程序。
这是我的计划的一部分,实际上是我遇到的唯一问题。
private void arrayTest()
{
String[] urls = CLLinks.Text.Split('\n');
for (int i = 0; i < urls.Length; i++)
{
log.AppendText("Opening Url...\n");
webBrowser1.Navigate(urls[i]);
log.AppendText("Reposting...\n");
clickRepost();
log.AppendText("Checking Completion...");
webBrowser1.Navigate(urls[i]);
completionCheck();
}
}
private void CLRenBtn_Click(object sender, EventArgs e)
{
arrayTest();
}
private void completionCheck()
{
HtmlElementCollection col = webBrowser1.Document.GetElementsByTagName("input");
foreach (HtmlElement item in col)
{
if (!(item.GetAttribute("value") == "Renew this Posting"))
{
log.AppendText("Renew Posting does not exist");
}
else
{ }
}
}
private void clickRepost()
{
HtmlElementCollection col = webBrowser1.Document.GetElementsByTagName("input");
foreach (HtmlElement item in col)
{
if (item.GetAttribute("value") == "Renew this Posting")
{
item.InvokeMember("click");
}
else
{}
}
}
CLRenBtn_Click
我按下表单上的按钮开始重新发布。 arrayTest()
将更改为更相关的名称。当时我只是测试这是否有效。我正计划合并clickRepost()
和completionCheck()
,因为他们做同样的事情。
非常感谢提前!
答案 0 :(得分:0)
找到答案! C# how to wait for a webpage to finish loading before continuing
对我有用,但现在我的小问题是,当我开始重新发布时。它跳过数组中的第一个url并发布后面的url。