Javascript Awesomium点击标签C#

Javascript Awesomium点击标签C#,javascript,c#,jquery,awesomium,Javascript,C#,Jquery,Awesomium,这对我不起作用,它不会产生点击。这可能是因为我的测试站点有许多使用 web.ExecuteJavascript(@"$('a').trigger('click');"); 如果此元素不是,则它可能没有click()方法 您可以尝试以下方法进行检查: private void timer_Tick(object sender, EventArgs e) { if (web.IsDocumentReady) {

这对我不起作用,它不会产生点击。这可能是因为我的测试站点有许多使用

web.ExecuteJavascript(@"$('a').trigger('click');");    

如果此元素不是
,则它可能没有
click()
方法

您可以尝试以下方法进行检查:

        private void timer_Tick(object sender, EventArgs e)
    {

        if (web.IsDocumentReady)
        {

            dynamic document = web.ExecuteJavascriptWithResult("document");
            dynamic submit = document.getElementsByTagName('a');
            submit.Invoke("click");
        }
    }    
或者使用动态(如果方法不存在,将引发异常):

您可以使用此选项单击这些元素:

dynamic btn = (JSObject) web.ExecuteJavascriptWithResult("document.getElementsByTagName('a')[0]");
btn.click();
示例:

public void JsFireEvent(string getElementQuery, string eventName)
{
    web.ExecuteJavascript(@"
                        function fireEvent(element,event) {
                            var evt = document.createEvent('HTMLEvents');
                            evt.initEvent(event, true, false ); // event type,bubbling,cancelable
                            element.dispatchEvent(evt);                                 
                        }
                        " + String.Format("fireEvent({0}, '{1}');", getElementQuery, eventName));
}
此外,您可能会发现这两个简单的帮助器类很有用:


第一个用于WebView/WebControl,第二个用于生成JS代码,用于通过XPath+获取JSObject的坐标来检索元素(JSObject)

您是否尝试过
document.getElementsByTagName('a')[0]。单击()?当然,如果您需要先单击……这对默认浏览器很好,但对awesomium不起作用,因为awesomium不包含文档的定义。我已经试过了。如果您指的是
web.ExecuteJavascript(“document.getElementsByTagName('a')[0]。click()”这也不起作用。它并没有显示任何错误,但仍然并没有做任何事情。好吧,你们可以通过移动鼠标到屏幕上的这个链接矩形来点击,并触发鼠标左键点击。我在我的一个项目(用C#编写并使用Awesomium)中有这个。因此,您需要DOM元素的
.getBoundingClientRect()
方法,
公共静态外部无效鼠标事件(UInt32 dwFlags、Int32 dx、Int32 dy、Int32 cButtons、IntPtr dwExtraInfo)
公共静态外部bool GetCursorPos(out Point lpPoint),都来自user32.dll(
[DllImport(“user32.dll”)]
)。这是一种很难的方法(我确实需要这样做),但也许你也必须这样做。因为Awesomium是基于铬的(就我所记得的而言),我建议谷歌提供所有通过JS触发点击的方法,而不是使用C#(例如,
link.firevent(“onclick”)
)。顺便说一下,
document
元素确实存在。
        private void timer_Tick(object sender, EventArgs e)
    {

        if (web.IsDocumentReady)
        {

            dynamic document = web.ExecuteJavascriptWithResult("document");
            dynamic submit = document.getElementsByTagName('a');
            submit.Invoke("click");
        }
    }    
JSObject btn = web.ExecuteJavascriptWithResult("document.getElementsByTagName('a')[0]");
if (btn.HasMethod("click"))
    btn.Invoke("click");
else
    // no such method
dynamic btn = (JSObject) web.ExecuteJavascriptWithResult("document.getElementsByTagName('a')[0]");
btn.click();
public void JsFireEvent(string getElementQuery, string eventName)
{
    web.ExecuteJavascript(@"
                        function fireEvent(element,event) {
                            var evt = document.createEvent('HTMLEvents');
                            evt.initEvent(event, true, false ); // event type,bubbling,cancelable
                            element.dispatchEvent(evt);                                 
                        }
                        " + String.Format("fireEvent({0}, '{1}');", getElementQuery, eventName));
}
JsFireEvent("document.getElementsByTagName('a')[0]", "click");

JsFireEvent("document.getElementsByTagName('a')[0]", "mouseup");