为什么element.click()在Cefsharp中不起作用?

时间:2017-08-23 16:01:45

标签: c# selenium web-scraping selenium-chromedriver cefsharp

我尝试在 Cefsharp 中执行以下脚本,点击DIV元素,然后无法正常工作。

private static string ClickUnreads = @"(function() {
                                        let chatsEl = document.querySelectorAll('.infinite-list-item');
                                        for (let x = 0; x < chatsEl.length; x++) {
                                            let unread = chatsEl[x].getElementsByClassName('unread');
                                            if (unread.length > 0) {
                                                chatsEl[x].click();
                                            }
                                        }
                                    })();";

public void ClickUnreads()
{
    WebBrowser.ExecuteScriptAsync(ClickUnreads);
}

我在这里发现类似的线程有类似于我的问题,但没有一个能够解决问题。

我想使用 Selenium 解决方案,就像我在Java中所做的那样,但我需要将浏览器嵌入到我的应用程序中,而且我无法使用Headless浏览器,因为该网站是我尝试自动化需要QR码验证。

是否可以使用 Chromium网络驱动程序来控制 Cefsharp ?如果可能的话,任何人都可以为我开灯吗? (告诉我它的链接)。

以下是我在Java中的代码,使用Chrome网络驱动程序,它就像魅力一样

while (true) {
    List<WebElement> chatItems = chatsList.findElements(By.className("infinite-list-item"));
    for (WebElement el : chatItems) {
        WebElement unread = el.findElement(By.className("unread"));
        if (unread != null) {
            unread.click();
        }
    }
    Thread.sleep(10000);
}

我也检查了这个link,看看是否有其他可嵌入的浏览器,但我没有时间对它们进行全面测试(任何建议都会受到赞赏)。

由于

1 个答案:

答案 0 :(得分:2)

好,

thread的帮助下,我设法解决了这个问题。 所以我把我的js脚本改成了这个

@"(function(x) {
let chatsEl = document.querySelectorAll('.infinite-list-item');
for (let x = 0; x < chatsEl.length; x++) {
    let unread = chatsEl[x].getElementsByClassName('unread');
    if (unread.length > 0) {
        let hoverEvent = document.createEvent ('MouseEvents');
        hoverEvent.initEvent ('mouseover', true, true);
        unread[0].dispatchEvent (hoverEvent);

        let downEvent = document.createEvent ('MouseEvents');
        downEvent.initEvent ('mousedown', true, true);
        unread[0].dispatchEvent (downEvent);

        let clickEvent = document.createEvent ('MouseEvents');
        clickEvent.initEvent ('click', true, true);
        unread[0].dispatchEvent (clickEvent);
    }
}
})();";

我设法点击了未读消息。