Selenium VB.Net 2019保存画布图像
梅米特·梅切克 我正在尝试使用Selenium VB.net 2019保存标记的图像。我的操作代码是Selenium VB.Net 2019保存画布图像,vb.net,selenium,canvas,save,Vb.net,Selenium,Canvas,Save,梅米特·梅切克 我正在尝试使用Selenium VB.net 2019保存标记的图像。我的操作代码是 Dim ele = driver.FindElementByClassName("canvasWrapper") Dim base64string = Trycast(driver.ExecuteScript(" var c = document.createElement('canvas'); var ctx =
Dim ele = driver.FindElementByClassName("canvasWrapper")
Dim base64string = Trycast(driver.ExecuteScript("
var c = document.createElement('canvas');
var ctx = c.getContext('2d');
var img = document.getElementById('page1');
c.height=img.naturalHeight;
c.width=img.naturalWidth;
ctx.drawImage(img, 0, 0,img.naturalWidth, img.naturalHeight);
var base64String = c.toDataURL();
return base64String;
"), String)
MsgBox(base64string.ToString())
Dim base64 = base64string.Split(",").Last()
Dim stream = New MemoryStream(Convert.FromBase64String(base64))
Dim bmCaptured As Bitmap = New Bitmap(stream)
bmCaptured.Save(Path + "\" + pageNum.ToString + ".jpg", Imaging.ImageFormat.Jpeg)
我收到错误`输入不是有效的Base-64字符串,因为它包含非Base-64字符、两个以上的填充字符或填充字符中的非法字符。我尝试过使用和不使用Trycast,但无法保存画布,但不断出现一些错误。VB.Net代码-明白了。。。但是尝试更多的解决办法
Dim bmpScreen As Screenshot = driver.GetScreenshot()
Dim scrshot As String= bmpScreen.AsBase64EncodedString
Dim screenshotAsByteArray As Byte() = bmpScreen.AsByteArray
bmpScreen.SaveAsFile(Path + "\" + pageNum.ToString + ".jpg",
System.Drawing.Imaging.ImageFormat.Jpeg)
在此之后,我们可以再次加载图像并裁剪到元素大小
我可以搜索和开发的另一个最佳方法代码片段如下所示,运行良好
Dim fileName = pageNum.ToString + ".png"
Dim jsExeString As String = "var element = document.createElement('a');
element.setAttribute('href',
document.getElementById('page1').toDataURL('image/png'));
element.setAttribute('download', '" + fileName + "');
element.style.display = 'none';
document.body.appendChild(element);
element.click();
document.body.removeChild(element);"
driver.ExecuteScript(jsExeString)
pagenum
基本上是一个计数器
,用作每个保存图像的文件名。唯一的缺点是所有文件都下载到默认下载文件夹
我可以使用的第三种方法是
Dim ele = driver.FindElementById("mainContainer")
Dim stringForFile = "<!DOCTYPE html><html xmlns='http://www.w3.org/1999/xhtml'>
<head>
<meta charset='UTF-8'/>
<meta name='viewport' content='width=device-width; initial-scale=1.0; user-scalable=no'/>
<meta content='notranslate' name='google'/>
<meta http-equiv='X-UA-Compatible' content='IE=edge'/>
<link rel='stylesheet' href='.\viewer.css' type='text/css'>
<link rel='stylesheet' href='.\book.css' type='text/css'>
<link rel='stylesheet' href='.\stick.css' type='text/css'>
<link rel='stylesheet' href='.\template.css' type='text/css'>
<link rel='stylesheet' href='.\media-queries.css' type='text/css'>
<link rel='stylesheet' href='.\styles.css' type='text/css'>
<link rel='stylesheet' href='.\jquery-ui.css' type='text/css'>
<link rel='stylesheet' type='text/css' href='.\jquery.fancybox.css' media='screen' />
<script src='.\jspdf.js'></script>
<script src='.\from_html.js'></script>
<script src='.\split_text_to_size.js'></script>
<script src='.\standard_fonts_metrics.js'></script>
</head><body>" &
ele.GetAttribute("innerHTML") &
"</body></html>"
File.WriteAllText(Path + "\" + pageNum.ToString + ".htm", stringForFile)
FileCopy(My.Application.Info.DirectoryPath & "\css\viewer.css", Path & "\" & "viewer.css")