CefSharp等待元素出现Javascript不触发提升事件

时间:2016-08-27 21:48:21

标签: javascript c# chromium-embedded cefsharp

我已经有很长一段时间了,到处都挖过,而且我的智慧结束了。解决方案似乎很简单:将一些javascript代码注入chrome浏览器以等待元素出现(浏览器已经完成加载而不等待元素,我的.net代码越过我要在页面上执行的自动化部分),然后继续。

我按照示例集herehere(参见构造函数)。

然而,加注事件并没有像我想象的那样开火。这可能是由于我的javascript代码 - 或者我可能错过了其他地方的某些内容。

这是js代码:

private void InjectJsWait(string eventName, string selector, int time, string eventStage)
    {
        string script = @"function waitForElementToDisplay(##SELECTOR##, ##TIME##) {
                                    if(document.querySelector(##SELECTOR##)!=null) {
                                        window.boundEvent.raiseEvent('##EVENTNAME##', {eventStage: ##STAGE##});
                                        return;
                                    }
                                    else {
                                        setTimeout(function() {
                                            waitForElementToDisplay(##SELECTOR##, ##TIME##);
                                        }, ##TIME##);
                                    }
                                }";

        script = Regex.Replace(script, "##SELECTOR##", selector);
        script = Regex.Replace(script, "##TIME##", time.ToString());
        script = Regex.Replace(script, "##EVENTNAME##", eventName);
        script = Regex.Replace(script, "##STAGE##", eventStage);

        browser.ExecuteScriptAsync(script);
    }

非常感谢任何帮助。

1 个答案:

答案 0 :(得分:0)

使用MutationObserver应该可以做到这一点。

您只需检查观察到的变化并过滤掉您需要的变化;不要猜测事件是否已被触发或是否已添加元素。

请注意,这需要Chrome 18+或26+才能使用