 |
|
 |
i like your idea about generating page thumbnail
it was nice and easy and really helpfull
thankyou
|
|
|
|
 |
|
 |
Hi there,
how can I make it captures sites with applets?
|
|
|
|
 |
|
 |
I want to save the image of given website page.
|
|
|
|
 |
|
 |
Hello,
How can I get 'real' height of my webpage ?
Thanks
|
|
|
|
 |
|
 |
For what do you need "real height" ,pal?
If document is too big it's useless to make tumbnail of all of it.
It can be tens of pages high!.
Tumbnail is very often only a representative icon of website (logo,frontlines etc),in that case maximum 800x600 size of client area of the hidden browser should be enough to get impression.
or did I miss somthing?
greetz
|
|
|
|
 |
|
 |
I generate a planning, height always change so when I show it on screen I need to cut it's image height (so I can print it).
|
|
|
|
 |
|
 |
i was trying to get a snapshot off a webpage using this way
Here we go real height
webBrowser1.Document.ActiveElement.ScrollRectangle.Height
to save to png:
private void webBrowser1_DocumentCompleted(Object sender, WebBrowserDocumentCompletedEventArgs e)
{
try
{
Bitmap docImage = new Bitmap(
webBrowser1.Document.ActiveElement.ScrollRectangle.Width,
webBrowser1.Document.ActiveElement.ScrollRectangle.Height);
webBrowser1.Height = webBrowser1.Document.ActiveElement.ScrollRectangle.Height;
webBrowser1.Width = webBrowser1.Document.ActiveElement.ScrollRectangle.Width;
webBrowser1.DrawToBitmap(docImage, new Rectangle(webBrowser1.Location.X, webBrowser1.Location.Y,
webBrowser1.Document.ActiveElement.ScrollRectangle.Width,
webBrowser1.Document.ActiveElement.ScrollRectangle.Height));
this.picDoc.Image = docImage;// this.picDoc.getSizedImage(docImage);
docImage.Save("c:\\image.png", ImageFormat.Png);
}
catch (Exception ex)
{
MessageBox.Show(ex.Message);
}
}
|
|
|
|
 |
|
 |
I am building a similar class library to take website snapshots. I only seem to have problems with blank images when I try to capture websites that have Java Applets on them. I was curious, so I downloaded your application to see if it has the same issue: unfortunately it does.
I created a windows form application that has a built-in WebBrowser control and the same website with the Java Applet then loads just fine. I noticed something though in the Windows Form application. The website has a slight delay while it loads the Java Applet.
I have a theory here; Even though the DocumentCompleted event fires in my class library, I don't think the WebBrowser control is really done painting the page to the browser screen, so when you call Browser.DrawToBitmap, it paints a blank image because it hasn't been drawn to the browser's window yet.
http://www.w3.org/People/mimasa/test/object/java/clock[^]
- Jon
|
|
|
|
 |
|
 |
hi, have you fixed this problem?
|
|
|
|
 |
|
 |
Hi! How can I fix the blank image problem? Does anyone have a simple solution?
Matt
|
|
|
|
 |
|
 |
Hi,
First of all thank you for this great piece of code
My question is:
Is it possible to make this code working on a asp.net website?
I would like to display thumbnails for previewing dynamic themes.
Thank you.
|
|
|
|
 |
|
 |
thanks ,but this piece of code is not really so great.
Just idea.
I didn't test it in asp environment but nothing forbids you to use hidden windows form in some other class inside web application I think.
generated tumbnail can be then send to client browser.
request > object that encapsulate hidden windows form with browser and code making snapshot > response .But some concurrency problems can arise if too many requests.This object can be shared and some queue for incoming urls can be foreseen.something like that .
I would like to see if it works but have few time to test it self...
Best regards
|
|
|
|
 |
|
 |
I tried to encapsulate it inside an asp.net page but i can't find a way to handle the webBrowser1_DocumentCompleted event.
If I call Navigate the event is not called.
Rgds.
|
|
|
|
 |
|
 |
You should probably look at running this out of process as Windows Service or console app.
Partyl because for a long running process like like this it wil be easier to control and you waont have the problems you are having now with thread context.
|
|
|
|
 |
|
 |
Ok, in fact that's a good idea.
Thank you for your support.
Regards,
Franck Quintana
|
|
|
|
 |
|
 |
Guys, the idea of loading web browser, MSIE, from aspx on your WEB SERVER with anything that your visitor will put into the address line is a trash horror movie from security point of view. There are better ways. My solution will be command line utility which will only be running on virtual machine. If any website will infect the operating system - so be it, but that will be virtual machine, not my web server.
|
|
|
|
 |
|
 |
I don't know why it works, but I found a way to fix the blank image issue. It probably isn't the cleanest code, but it's available at the following link:
http://www.surpluscode.com/2006/10/16/update-web-page-thumbnail-maker/
Basically, I have a form with the web browser control in it. Before I take a screen shot, I activate that form, re-activate the main form, and then perform the screen shot work. Also, I have another form and another web browser control that takes "blank" screen shots. If the screen shot from a actual web site matches the blank screen shot (bad), the code will re-try it for up to 5 times to get a real screen shot. Usually it only takes one or two tries to get it.
I would give exact details on where to make the changes, but as you can see from the link above, I have made some significant changes to the UI and code structure.
|
|
|
|
 |
|
 |
Has anybody got any suggestions as to how I can overcome my problem?
I've tried comparing images for blank bitmaps, but my problem is that I'm displaying a web page that is bigger than the visible area of the webBrowser control. The resulting image is black beyond the part of the image that would normally not be visible. Prior to drawing the bitmap I have tried resizing the form, but to no avail. If I scroll to the bottom of the web page before capturing the image I get just a blank white image (with black in the areas as above).
-- modified at 4:56 Thursday 23rd November, 2006
I have found a way to overcome my problems - my article at http://www.codeproject.com/useritems/XML_Tool.asp[^] provides code and a demo to show how I acheived this.
|
|
|
|
 |
|
 |
It seems the blank image problem revolves around pages that have iframes embedded in the html. For an example: try to run the program against http://www.microsoft.com you will get a perfect picture.
The only iframes in the page are created with javascript. This is created in lines 126 thru 128
<script type="text/javascript">var AdHtml='<iframe frameborder="0" scrolling="no" marginheight="0px" marginwidth="0px" allowtransparency="true" style="background:#F1F1F1" width="120" height="240" src="http://rad.microsoft.com/ADSAdClient31.dll?GetAd=&PG=CMSIE4&SC=F3&AP=1164"><'+'/iframe>';document.writeln(AdHtml);</script>
Now look at http://msdn.microsoft.com. You get a blank image and the difference is that there are embedded iframes in the html, that are not created with javascript. Look at lines 717 thru 719
<iframe frameborder="0" scrolling="no" marginheight="0px" marginwidth="0px" width="120" height="240" id="rad_CMSAD2F3" src="http://rad.microsoft.com/ADSAdClient31.dll?GetAd=&PG=CMSAD2&SC=F3&AP=1164"></iframe>
and lines 1090 thru 1092
<iframe frameborder="0" scrolling="no" marginheight="0px" marginwidth="0px" width="120" height="90" id="rad_CMSAD1F2" src="http://rad.microsoft.com/ADSAdClient31.dll?GetAd=&PG=CMSAD1&SC=F2&AP=1027"></iframe>
Not sure why this would cause a blank image because stepping through the code and it gets to the event handler for webBrowser1_DocumentCompleted you can do a ?webBrowser1.DocumentText and retrieve the text for the page, which means the complete page is retrieved, meaning that the page should have been rendered. So your guess is as good as mine on why it is not rendered to the bitmap.
|
|
|
|
 |
|
 |
Funny thing is that if you try to get page time after time you get it .At least it is true for me.
DocumentLoaded event is fired several times for each target url and
e.Url(WebBrowserDocumentCompletedEventArgs object) shows that those urls you mentioned(http://rad.microsoft.com/ADSAdClient31.dll etc ,but not only )are among them.I've created method getBaseUrl to get base Uri for given url something like:
Uri baseUri = null;
private Uri getBaseUrl(Uri request_url) {
WebRequest wrq = WebRequest.Create(request_url);
wrq.Method = "HEAD";
WebResponse wrsp = wrq.GetResponse();
Uri l_uri = wrsp.ResponseUri;
wrsp = null;
wrq = null;
return l_uri;
}
then I filter out all DocumentCompleted events for a given url except one for base url.
Something like if(e.Url==getBaseUrl(request uri) ) WebBrowser.drawToBitmap.
But still I get page from msdn.microsoft.com very irregulary.
There is a problem but I thinks it is not really related to iframes rather to microsoft security policies for those urls.May be i'm wrong .I'm still looking for answers.
Best regards
|
|
|
|
 |
|
 |
The problem doesn't seem to be solely associated with this project. I'm using a PDF Reader to generate a bitmap of a page, and it appears as though calling Control.DrawToBitmap() twice works in some scenarios, provided that the pdf isn't too graphically intensive.
|
|
|
|
 |
|
 |
My apologies ! No insult to you intended.
It's nice to know that on this website you can erase history
best, Bill
"The greater the social and cultural distances between people, the more magical the light that can spring from their contact." Milan Kundera in Testaments Trahis
|
|
|
|
 |
|
 |
Thanks for the article, this is a very interesting find. I suggest you include the code proposed some posts below into the download, the visual rendering is much better.
Simone Busoli
|
|
|
|
 |
|
 |
One day I will.Together with other enhancements.Not yet.
Cheers.
|
|
|
|
 |
|
 |
Your demo application works just fine.
I tried to implement it myself, but I get an empty bitmap. Moreover, on MSDN the method WebControl.DrawToBitmap is marked as not supported.
Could you help me?
Thanks.
|
|
|
|
 |