js执行后如何通过weBbrowser控件操作网页?
How to manipulate webpage by weBrowser control after JS is executed?
我的网页通过 json 获取数据,然后从该数据生成 html。我希望能够对 JS 生成的源代码执行 element.invokeMember("click");
(webBrowser winForms 控件)。如何在 C# 中做到这一点?
我只能在 firebug 中看到来源。
我已经做了什么:(_ie 从这里:How to make WebBrowser wait till it loads fully?)
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
webBrowser1.ProgressChanged += new WebBrowserProgressChangedEventHandler(_ie);
}
private void _ie(object sender, WebBrowserProgressChangedEventArgs e)
{
int max = (int)Math.Max(e.MaximumProgress, e.CurrentProgress);
int min = (int)Math.Min(e.MaximumProgress, e.CurrentProgress);
if (min.Equals(max))
{
Console.Write("complete");
var menus = webBrowser1.Document.GetElementsByTagName("menu");
Console.Write(menus.Count);
var votes = new List<HtmlElement>();
foreach (HtmlElement menu in menus)
{
Console.Write("found");
var ass = menu.GetElementsByTagName("a");
foreach (HtmlElement a in ass)
{
if (a.GetAttribute("class").Contains("vote-up"))
{
a.InvokeMember("click");
}
}
}
}
}
private void button1_Click(object sender, EventArgs e)
{
webBrowser1.Navigate("xxxxx");
}
}
HTML:
http://pastebin.com/0KGCwtqs
复制自 firebug,因此一些标签已折叠。我只想要 <menu>
-><footer>
-> <a class="vote-up ...">
Console.Write("found")
未执行。所以 webBrowser 甚至找不到 <menu>
已解决
就用棘手的JS
var elements=document.getElementsByClassName('vote-up');for (index = 0; index < elements.length; index++) {elements[index].click();}
已解决
只需使用一些 js 并从浏览器调用它
var elements=document.getElementsByClassName('vote-up');
for (index = 0; index < elements.length; index++) {elements[index].click();}
我的网页通过 json 获取数据,然后从该数据生成 html。我希望能够对 JS 生成的源代码执行 element.invokeMember("click");
(webBrowser winForms 控件)。如何在 C# 中做到这一点?
我只能在 firebug 中看到来源。
我已经做了什么:(_ie 从这里:How to make WebBrowser wait till it loads fully?)
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
webBrowser1.ProgressChanged += new WebBrowserProgressChangedEventHandler(_ie);
}
private void _ie(object sender, WebBrowserProgressChangedEventArgs e)
{
int max = (int)Math.Max(e.MaximumProgress, e.CurrentProgress);
int min = (int)Math.Min(e.MaximumProgress, e.CurrentProgress);
if (min.Equals(max))
{
Console.Write("complete");
var menus = webBrowser1.Document.GetElementsByTagName("menu");
Console.Write(menus.Count);
var votes = new List<HtmlElement>();
foreach (HtmlElement menu in menus)
{
Console.Write("found");
var ass = menu.GetElementsByTagName("a");
foreach (HtmlElement a in ass)
{
if (a.GetAttribute("class").Contains("vote-up"))
{
a.InvokeMember("click");
}
}
}
}
}
private void button1_Click(object sender, EventArgs e)
{
webBrowser1.Navigate("xxxxx");
}
}
HTML:
http://pastebin.com/0KGCwtqs
复制自 firebug,因此一些标签已折叠。我只想要 <menu>
-><footer>
-> <a class="vote-up ...">
Console.Write("found")
未执行。所以 webBrowser 甚至找不到 <menu>
已解决
就用棘手的JS
var elements=document.getElementsByClassName('vote-up');for (index = 0; index < elements.length; index++) {elements[index].click();}
已解决
只需使用一些 js 并从浏览器调用它
var elements=document.getElementsByClassName('vote-up');
for (index = 0; index < elements.length; index++) {elements[index].click();}