CefSharp Winforms - Execute javascript before showing browser
I am trying to load a page and execute some javascript before showing the browser to the user. This because i want to take them through some screens before they get it shown (selenium like), and i only want to show it when i require their input (Wich is after the 2nd pageload).
Unfortunatly i cant go to that page directly, i have to click a link first. But whatever i try, it will still show the browser, then execute the javascript. My current test is below, was playing around with browser.visible, but that doesnt work either, i still see the js being executed.
(Site and javascript are dummy values)
public ChromiumWebBrowser browser;
public void InitBrowser()
{
Cef.Initialize(new CefSettings());
browser = new ChromiumWebBrowser("https://www.bing.com/");
this.Controls.Add(browser);
browser.Visible = false;
browser.FrameLoadEnd += (sender, args) =>
{
//Wait for the MainFrame to finish loading
if (args.Frame.IsMain)
{
//do this first
browser.ExecuteScriptAsyncWhenPageLoaded("document.getElementById('sb_form_q').value = 'test';",true);
browser.ExecuteScriptAsyncWhenPageLoaded("document.getElementById('sb_form_go').click();",true);
}
};
browser.FrameLoadEnd += (sender, args) =>
{
//Wait for the MainFrame to finish loading
if (args.Frame.IsMain)
{
//when page is loaded again, do this:
browser.ExecuteScriptAsync("document.getElementById('hplogo').src='https://logos-download.com/wp-content/uploads/2016/02/bing-tm-logo.png'");
}
};
//then show browser again
browser.Visible = true;
}
c# cefsharp
add a comment |
I am trying to load a page and execute some javascript before showing the browser to the user. This because i want to take them through some screens before they get it shown (selenium like), and i only want to show it when i require their input (Wich is after the 2nd pageload).
Unfortunatly i cant go to that page directly, i have to click a link first. But whatever i try, it will still show the browser, then execute the javascript. My current test is below, was playing around with browser.visible, but that doesnt work either, i still see the js being executed.
(Site and javascript are dummy values)
public ChromiumWebBrowser browser;
public void InitBrowser()
{
Cef.Initialize(new CefSettings());
browser = new ChromiumWebBrowser("https://www.bing.com/");
this.Controls.Add(browser);
browser.Visible = false;
browser.FrameLoadEnd += (sender, args) =>
{
//Wait for the MainFrame to finish loading
if (args.Frame.IsMain)
{
//do this first
browser.ExecuteScriptAsyncWhenPageLoaded("document.getElementById('sb_form_q').value = 'test';",true);
browser.ExecuteScriptAsyncWhenPageLoaded("document.getElementById('sb_form_go').click();",true);
}
};
browser.FrameLoadEnd += (sender, args) =>
{
//Wait for the MainFrame to finish loading
if (args.Frame.IsMain)
{
//when page is loaded again, do this:
browser.ExecuteScriptAsync("document.getElementById('hplogo').src='https://logos-download.com/wp-content/uploads/2016/02/bing-tm-logo.png'");
}
};
//then show browser again
browser.Visible = true;
}
c# cefsharp
You are settingVisible = false
then adding actions to events (not executing the actions) then settingVisible = true
when the events might not have fired yet. Try puttingbrowser.Visible = true
within one of the events or create a new event to trigger it to show or use.ContinueWith( () => { browser.Visible = true; } );
– Minijack
Nov 28 '18 at 22:11
You can connectPuppeteer Sharp
to a running instance for automation purposes. Your code doesn't handle theFrameLoadEnd
event properly, subscribing twice doesn't mean first run will be first handler, second will be second handler. Both handlers will fire. You have to subscribe, unsubscribe, subscribe a different handler. Or just check the frame url in the one handler.
– amaitland
Nov 29 '18 at 0:14
How can i check the frameurl in a handler? .Adress doesnt exist according to VS
– Martijn Deleij
Nov 29 '18 at 5:55
cefsharp.github.io/api/67.0.0/html/P_CefSharp_IFrame_Url.htm
– amaitland
Nov 29 '18 at 10:04
add a comment |
I am trying to load a page and execute some javascript before showing the browser to the user. This because i want to take them through some screens before they get it shown (selenium like), and i only want to show it when i require their input (Wich is after the 2nd pageload).
Unfortunatly i cant go to that page directly, i have to click a link first. But whatever i try, it will still show the browser, then execute the javascript. My current test is below, was playing around with browser.visible, but that doesnt work either, i still see the js being executed.
(Site and javascript are dummy values)
public ChromiumWebBrowser browser;
public void InitBrowser()
{
Cef.Initialize(new CefSettings());
browser = new ChromiumWebBrowser("https://www.bing.com/");
this.Controls.Add(browser);
browser.Visible = false;
browser.FrameLoadEnd += (sender, args) =>
{
//Wait for the MainFrame to finish loading
if (args.Frame.IsMain)
{
//do this first
browser.ExecuteScriptAsyncWhenPageLoaded("document.getElementById('sb_form_q').value = 'test';",true);
browser.ExecuteScriptAsyncWhenPageLoaded("document.getElementById('sb_form_go').click();",true);
}
};
browser.FrameLoadEnd += (sender, args) =>
{
//Wait for the MainFrame to finish loading
if (args.Frame.IsMain)
{
//when page is loaded again, do this:
browser.ExecuteScriptAsync("document.getElementById('hplogo').src='https://logos-download.com/wp-content/uploads/2016/02/bing-tm-logo.png'");
}
};
//then show browser again
browser.Visible = true;
}
c# cefsharp
I am trying to load a page and execute some javascript before showing the browser to the user. This because i want to take them through some screens before they get it shown (selenium like), and i only want to show it when i require their input (Wich is after the 2nd pageload).
Unfortunatly i cant go to that page directly, i have to click a link first. But whatever i try, it will still show the browser, then execute the javascript. My current test is below, was playing around with browser.visible, but that doesnt work either, i still see the js being executed.
(Site and javascript are dummy values)
public ChromiumWebBrowser browser;
public void InitBrowser()
{
Cef.Initialize(new CefSettings());
browser = new ChromiumWebBrowser("https://www.bing.com/");
this.Controls.Add(browser);
browser.Visible = false;
browser.FrameLoadEnd += (sender, args) =>
{
//Wait for the MainFrame to finish loading
if (args.Frame.IsMain)
{
//do this first
browser.ExecuteScriptAsyncWhenPageLoaded("document.getElementById('sb_form_q').value = 'test';",true);
browser.ExecuteScriptAsyncWhenPageLoaded("document.getElementById('sb_form_go').click();",true);
}
};
browser.FrameLoadEnd += (sender, args) =>
{
//Wait for the MainFrame to finish loading
if (args.Frame.IsMain)
{
//when page is loaded again, do this:
browser.ExecuteScriptAsync("document.getElementById('hplogo').src='https://logos-download.com/wp-content/uploads/2016/02/bing-tm-logo.png'");
}
};
//then show browser again
browser.Visible = true;
}
c# cefsharp
c# cefsharp
asked Nov 28 '18 at 22:07
Martijn DeleijMartijn Deleij
76
76
You are settingVisible = false
then adding actions to events (not executing the actions) then settingVisible = true
when the events might not have fired yet. Try puttingbrowser.Visible = true
within one of the events or create a new event to trigger it to show or use.ContinueWith( () => { browser.Visible = true; } );
– Minijack
Nov 28 '18 at 22:11
You can connectPuppeteer Sharp
to a running instance for automation purposes. Your code doesn't handle theFrameLoadEnd
event properly, subscribing twice doesn't mean first run will be first handler, second will be second handler. Both handlers will fire. You have to subscribe, unsubscribe, subscribe a different handler. Or just check the frame url in the one handler.
– amaitland
Nov 29 '18 at 0:14
How can i check the frameurl in a handler? .Adress doesnt exist according to VS
– Martijn Deleij
Nov 29 '18 at 5:55
cefsharp.github.io/api/67.0.0/html/P_CefSharp_IFrame_Url.htm
– amaitland
Nov 29 '18 at 10:04
add a comment |
You are settingVisible = false
then adding actions to events (not executing the actions) then settingVisible = true
when the events might not have fired yet. Try puttingbrowser.Visible = true
within one of the events or create a new event to trigger it to show or use.ContinueWith( () => { browser.Visible = true; } );
– Minijack
Nov 28 '18 at 22:11
You can connectPuppeteer Sharp
to a running instance for automation purposes. Your code doesn't handle theFrameLoadEnd
event properly, subscribing twice doesn't mean first run will be first handler, second will be second handler. Both handlers will fire. You have to subscribe, unsubscribe, subscribe a different handler. Or just check the frame url in the one handler.
– amaitland
Nov 29 '18 at 0:14
How can i check the frameurl in a handler? .Adress doesnt exist according to VS
– Martijn Deleij
Nov 29 '18 at 5:55
cefsharp.github.io/api/67.0.0/html/P_CefSharp_IFrame_Url.htm
– amaitland
Nov 29 '18 at 10:04
You are setting
Visible = false
then adding actions to events (not executing the actions) then setting Visible = true
when the events might not have fired yet. Try putting browser.Visible = true
within one of the events or create a new event to trigger it to show or use .ContinueWith( () => { browser.Visible = true; } );
– Minijack
Nov 28 '18 at 22:11
You are setting
Visible = false
then adding actions to events (not executing the actions) then setting Visible = true
when the events might not have fired yet. Try putting browser.Visible = true
within one of the events or create a new event to trigger it to show or use .ContinueWith( () => { browser.Visible = true; } );
– Minijack
Nov 28 '18 at 22:11
You can connect
Puppeteer Sharp
to a running instance for automation purposes. Your code doesn't handle the FrameLoadEnd
event properly, subscribing twice doesn't mean first run will be first handler, second will be second handler. Both handlers will fire. You have to subscribe, unsubscribe, subscribe a different handler. Or just check the frame url in the one handler.– amaitland
Nov 29 '18 at 0:14
You can connect
Puppeteer Sharp
to a running instance for automation purposes. Your code doesn't handle the FrameLoadEnd
event properly, subscribing twice doesn't mean first run will be first handler, second will be second handler. Both handlers will fire. You have to subscribe, unsubscribe, subscribe a different handler. Or just check the frame url in the one handler.– amaitland
Nov 29 '18 at 0:14
How can i check the frameurl in a handler? .Adress doesnt exist according to VS
– Martijn Deleij
Nov 29 '18 at 5:55
How can i check the frameurl in a handler? .Adress doesnt exist according to VS
– Martijn Deleij
Nov 29 '18 at 5:55
cefsharp.github.io/api/67.0.0/html/P_CefSharp_IFrame_Url.htm
– amaitland
Nov 29 '18 at 10:04
cefsharp.github.io/api/67.0.0/html/P_CefSharp_IFrame_Url.htm
– amaitland
Nov 29 '18 at 10:04
add a comment |
0
active
oldest
votes
StackExchange.ifUsing("editor", function () {
StackExchange.using("externalEditor", function () {
StackExchange.using("snippets", function () {
StackExchange.snippets.init();
});
});
}, "code-snippets");
StackExchange.ready(function() {
var channelOptions = {
tags: "".split(" "),
id: "1"
};
initTagRenderer("".split(" "), "".split(" "), channelOptions);
StackExchange.using("externalEditor", function() {
// Have to fire editor after snippets, if snippets enabled
if (StackExchange.settings.snippets.snippetsEnabled) {
StackExchange.using("snippets", function() {
createEditor();
});
}
else {
createEditor();
}
});
function createEditor() {
StackExchange.prepareEditor({
heartbeatType: 'answer',
autoActivateHeartbeat: false,
convertImagesToLinks: true,
noModals: true,
showLowRepImageUploadWarning: true,
reputationToPostImages: 10,
bindNavPrevention: true,
postfix: "",
imageUploader: {
brandingHtml: "Powered by u003ca class="icon-imgur-white" href="https://imgur.com/"u003eu003c/au003e",
contentPolicyHtml: "User contributions licensed under u003ca href="https://creativecommons.org/licenses/by-sa/3.0/"u003ecc by-sa 3.0 with attribution requiredu003c/au003e u003ca href="https://stackoverflow.com/legal/content-policy"u003e(content policy)u003c/au003e",
allowUrls: true
},
onDemand: true,
discardSelector: ".discard-answer"
,immediatelyShowMarkdownHelp:true
});
}
});
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
StackExchange.ready(
function () {
StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2fstackoverflow.com%2fquestions%2f53528846%2fcefsharp-winforms-execute-javascript-before-showing-browser%23new-answer', 'question_page');
}
);
Post as a guest
Required, but never shown
0
active
oldest
votes
0
active
oldest
votes
active
oldest
votes
active
oldest
votes
Thanks for contributing an answer to Stack Overflow!
- Please be sure to answer the question. Provide details and share your research!
But avoid …
- Asking for help, clarification, or responding to other answers.
- Making statements based on opinion; back them up with references or personal experience.
To learn more, see our tips on writing great answers.
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
StackExchange.ready(
function () {
StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2fstackoverflow.com%2fquestions%2f53528846%2fcefsharp-winforms-execute-javascript-before-showing-browser%23new-answer', 'question_page');
}
);
Post as a guest
Required, but never shown
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
You are setting
Visible = false
then adding actions to events (not executing the actions) then settingVisible = true
when the events might not have fired yet. Try puttingbrowser.Visible = true
within one of the events or create a new event to trigger it to show or use.ContinueWith( () => { browser.Visible = true; } );
– Minijack
Nov 28 '18 at 22:11
You can connect
Puppeteer Sharp
to a running instance for automation purposes. Your code doesn't handle theFrameLoadEnd
event properly, subscribing twice doesn't mean first run will be first handler, second will be second handler. Both handlers will fire. You have to subscribe, unsubscribe, subscribe a different handler. Or just check the frame url in the one handler.– amaitland
Nov 29 '18 at 0:14
How can i check the frameurl in a handler? .Adress doesnt exist according to VS
– Martijn Deleij
Nov 29 '18 at 5:55
cefsharp.github.io/api/67.0.0/html/P_CefSharp_IFrame_Url.htm
– amaitland
Nov 29 '18 at 10:04