如果没有事件处理程序,网页如何知道我何时与元素交互



我试图使用WebBrowser来抓取这个网站,并试图以编程方式将显示的页面数量更改为200。如果你手动改变下拉菜单的值,它会刷新结果,以显示你选择的结果的数量,但如果你用注入JavaScript(因为WebBrowser允许注入JavaScript代码到页面的本地副本),值会改变,但页面不会刷新。

我还尝试通过使用menu.onchange()menu.fireEvent("onchange")(其中menuselect元素)来触发onchange事件,但没有发生任何事情。然后我通过执行for..in循环并以这种方式显示以on...开头的每个项目来遍历select元素中的每个事件(至少这是我认为的):

for(var i in menu)
{
    if(("" + i).indexOf("on") == 0) alert("" + i + " => " + menu[i])
}

我注意到每一个事件都是null。如果每个事件都是null,那么页面如何知道我正在更改值?

我确实找到了一个解决方案,并采取了另一种方式,可能使用WebBrowser不是抓取这个网站的最佳方式。但我真的很好奇上面和寻找一个解决方案如何刮这个网站了。

页面使用jQuery将change事件处理程序绑定到元素。change事件处理程序提交父表单。以下内容可以在main.js第268-272行中找到:

var pagingControls = $('.page_size select');
if(pagingControls.length >= 1)
{
    pagingControls.change( function(){ this.parentNode.submit();})
}

以这种方式绑定事件处理程序不会导致元素本身的属性发生变化,这就是为什么当您查看on...属性时没有显示任何内容的原因。

如果你想调用服务器端事件使用这样的webBrowser1.Document.GetElementById("ctl00_ContentPlaceHolder1_drpType").InvokeMember("onchange");

其中onchanged为服务器端事件

最新更新