如果没有事件处理程序,网页如何知道我何时与元素交互
本文关键字:何时 元素 交互 何知道 事件处理 程序 网页 如果没有 | 更新日期: 2023-09-27 18:14:47
我试图使用WebBrowser
来抓取这个网站,并试图以编程方式将显示的页面数量更改为200。如果你手动改变下拉菜单的值,它会刷新结果,以显示你选择的结果的数量,但如果你用注入JavaScript(因为WebBrowser
允许注入JavaScript代码到页面的本地副本),值会改变,但页面不会刷新。
我还尝试通过使用menu.onchange()
和menu.fireEvent("onchange")
(其中menu
是select
元素)来触发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为服务器端事件