나는이 동안 꽤 오래 있었고, 어디서나 파고 들었다. 솔루션은 간단합니다 : 크롬 브라우저에 일부 자바 스크립트 코드를 삽입하여 요소가 나타날 때까지 기다립니다 (브라우저가 이미로드를 완료하고 요소를 기다리지 않고 내 .net 코드가 페이지에서 수행하려는 자동화 부분을지나칩니다).), 계속하십시오.CefSharp 엘리먼트가 나타날 때까지 대기 자바 스크립트가 트리거되지 않음 이벤트 발생
다음 예제는 here 및 here입니다 (생성자 참조).
그러나 raise 이벤트는 발생해야한다고 생각한 것처럼 실행되지 않습니다. 아마 내 자바 스크립트 코드 때문일 수도 있습니다. 또는 다른 곳에서 뭔가 놓친 가능성이 있습니다. 어떤 도움을 크게 감상 할 수
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);
}
: 여기
는 JS 코드입니다.
'MutationObserver'사용을 고려 했습니까? 또한 https://github.com/cefsharp/CefSharp/wiki/Frequently-asked-questions#when-can-i-start-executing-javascript – amaitland
을 읽었는지 확인하십시오. 예, LoadingStateChanged 이벤트 후 JS 주입 중입니다. 해고하고 IsLoading 테스트를 통과했습니다. 나는 MutationObserver에 대해 많이 읽었지만, 나는 그 주위에 내 머리를 감싸고있는 것처럼 보일 수 없다. –
모질라의 예제에서 스크립트가 어떻게 쓰여 졌는지 알 수 있습니다. 그러나이 스크립트를 boundObject에 바인딩하고 C#에서 요소가 최종적으로 있는지 확인하기 위해 이벤트를 발생시켜야합니다. 이것으로 실험 해보고 MutationObserver로 작업 할 수 있는지 알아 보겠습니다. –