Screenshot – Chrome – Selenium – Entire page

How to make screenshot of entire page in chrome /beyond 16384px height/ – C# code (should work in other languages) – solved by taking 16k tall screenshot, stitching them together later

RELATED LINKS – CHROME BUG FOR screenshot height > 16384px

List<Bitmap> list_imageToStitch = new List<Bitmap>();

Dictionary<string, Object> metrics = new Dictionary<string, Object>();
metrics["width"] = ((ChromeDriver)webDriver).ExecuteScript("return Math.max(window.innerWidth,document.body.scrollWidth,document.documentElement.scrollWidth)");
metrics["height"] = ((ChromeDriver)webDriver).ExecuteScript("return Math.max(window.innerHeight,document.body.scrollHeight,document.documentElement.scrollHeight)");
metrics["deviceScaleFactor"] = ((ChromeDriver)webDriver).ExecuteScript("return window.devicePixelRatio");
metrics["mobile"] = ((ChromeDriver)webDriver).ExecuteScript("return typeof window.orientation !== 'undefined'");

int maxAllowedHeight = 16000;
int pageHeight = Int32.Parse(metrics["height"].ToString());
int screenshotCount = Convert.ToInt32(Math.Ceiling(((double)pageHeight / (double)16000)));
for (int i = 0; i < screenshotCount; i++)
{
    Dictionary<string, object> parameters = new Dictionary<string, object>();
    parameters["format"] = "png";
    parameters["fromSurface"] = true;
    parameters["captureBeyondViewport"] = true;
    Dictionary<string, object> parametersClip = new Dictionary<string, object>();
    parametersClip["width"] = metrics["width"];
    parametersClip["height"] = ((i < (screenshotCount - 1)) ? (maxAllowedHeight) : (pageHeight % 16000));
    parametersClip["x"] = 0;
    parametersClip["y"] = i * maxAllowedHeight;
    parametersClip["scale"] = 1;
    parameters["clip"] = parametersClip;
    object screenshotObject = ((ChromeDriver)webDriver).ExecuteChromeCommandWithResult("Page.captureScreenshot", parameters);
    Dictionary<string, object> screenshotResult = screenshotObject as Dictionary<string, object>;
    string screenshotData = screenshotResult["data"] as string;
    Screenshot screenshot = new Screenshot(screenshotData);

    if (screenshotCount > 1)
    {
        Bitmap bmpScreen = new Bitmap(new MemoryStream(screenshot.AsByteArray));
        list_imageToStitch.Add(bmpScreen);
    }
    else
    {
       screenshot.SaveAsFile(screenshotFileName, ScreenshotImageFormat.Png);
    }
}

if (screenshotCount > 1)
{
    int newWidth = list_imageToStitch.Max(image => image.Width);
    int newHeight = list_imageToStitch.Sum(image => image.Height);
    Bitmap bitmapStitched = new Bitmap(newWidth, newHeight);
    using (Graphics graphics = Graphics.FromImage(bitmapStitched))
    {
        int height = 0;
        foreach (Bitmap image in list_imageToStitch)
        {
            graphics.DrawImage(image, 0, height);
            height += image.Height;
        }
    }
    bitmapStitched.Save(screenshotFileName, ImageFormat.Png);
}

Regex

A quick reference guide for regular expressions (regex), including symbols, ranges, grouping, assertions and some sample patterns to get you started.

^Start of string, or start of line in multi-line pattern
\AStart of string
$End of string, or end of line in multi-line pattern
\ZEnd of string
\bWord boundary
\BNot word boundary
\<Start of word
\>End of word
Anchors
\cControl character
\sWhite space
\SNot white space
\dDigit
\DNot digit
\wWord
\WNot word
\xHexade­cimal digit
\OOctal digit
Character Classes
[:upper:]Upper case letters
[:lower:]Lower case letters
[:alpha:]All letters
[:alnum:]Digits and letters
[:digit:]Digits
[:xdigit:]Hexade­cimal digits
[:punct:]Punctu­ation
[:blank:]Space and tab
[:space:]Blank characters
[:cntrl:]Control characters
[:graph:]Printed characters
[:print:]Printed characters and spaces
[:word:]Digits, letters and underscore
POSIX
?=Lookahead assertion
?!Negative lookahead
?<=Lookbehind assertion
?!= or ?<!Negative lookbehind
?>Once-only Subexp­ression
?()Condition [if then]
?()|Condition [if then else]
?#Comment
Assertions
*0 or more
{3}Exactly 3
+1 or more
{3,}3 or more
?0 or 1
{3,5}3, 4 or 5
?Add a ? to a quantifier to make it ungreedy.
Quanti­fiers
\Escape following character
\QBegin literal sequence
\EEnd literal sequence
„­Esc­api­ng“ is a way of treating characters which have a special meaning in regular expres­sions literally, rather than as special charac­ters.
Escape Sequences
^[.$
{*(\
+)|?
<>
Common Metach­ara­cters
\nNew line
\rCarriage return
\tTab
\vVertical tab
\fForm feed
\xxxOctal character xxx
\xhhHex character hh
Special Characters
.Any character except new line (\n)
(a|b)a or b
(…)Group
(?:…)Passive (non-c­apt­uring) group
[abc]Range (a or b or c)
[^abc]Not (a or b or c)
[a-q]Lower case letter from a to q
[A-Q]Upper case letter from A to Q
[0-7]Digit from 0 to 7
\xGroup/­sub­pattern number „­x“
Ranges are inclusive.
Groups and Ranges
gGlobal match
i *Case-i­nse­nsitive
m *Multiple lines
s *Treat string as single line
x *Allow comments and whitespace in pattern
e *Evaluate replac­ement
U *Ungreedy pattern
* PCRE modifier
Pattern Modifiers
$nnth non-pa­ssive group
$2„­xyz­“ in /^(abc­(xy­z))$/
$1„­xyz­“ in /^(?:a­bc)­(xyz)$/
$`Before matched string
$‘After matched string
$+Last matched string
$&Entire matched string
Some regex implem­ent­ations use \ instead of $.
String Replac­ement

Source: davechild

Typická přihlašovací jména a hesla do administrace routerů

Typická přihlašovací jména a hesla do administrace routerů

Výrobce, značka Typická tovární kombinace jména a hesla správce
Airlive (Ovislink)admin/admin, admin/airlive, admin/airlive
Asusadmin/admin, -/admin
Belkin-/-, -/admin
D-Linkadmin/-, admin/admin, user/-, user/user
Edimaxadmin/1234
Netgearadmin/admin, admin/password, admin/-, super/5777364
Linksys-/admin, admin/admin, admin/-
Tendaadmin/admin
TP-Linkadmin/admin
Zyxel-/1234, admin/1234, admin/admin

Webová administrace:

192.168.1.1, 192.168.2.1, 192.168.0.1, 192.168.1.254, 192.168.100.254, 192.168.0.50, 10.0.0.138.