当前位置: 首页 > 面试题库 >

如何使用Selenium和Java获取完整网页的屏幕截图?

宋勇
2023-03-14
问题内容

如何使用Selenium WebDriver 拍摄整个网页的屏幕快照( 全屏屏幕截图 ),而不仅仅是部分( 从上到下 )?

我的代码:Java绑定

System.setProperty("webdriver.chrome.driver","/home/alex/Downloads/chromedriver_html" target="_blank">linux64/chromedriver");
WebDriver driver = new ChromeDriver();
driver.get("http://google.com");
File scrFile = ((TakesScreenshot)driver).getScreenshotAs(OutputType.FILE);
FileUtils.copyFile(scrFile, new File(RESULT_FILENAME));

关于如何解决这个问题的任何想法?


问题答案:

LE: 我看到很多人都对整页的截图感兴趣,所以我想我可能会用一些肯定的答案( 银色子弹 )来更新答案。

有很多Web测试框架可以( 只需最少的设置和工作 )即可生成 整页的屏幕截图
。我来自NodeJS测试环境,因此只能担保以下内容:WebdriverIO和Google的Puppeteer。

如果有人对使用WebdriverIO的简便方法感兴趣,请查看此答案。

简而言之, 如果您仅使用Selenium 不能您不能
。但是,您可以做的是充分利用设备的(监视)视口。

因此,请使用来启动浏览器实例(驱动程序)ChromeOptions(),这是设置ChromeDriver特定功能的方法。我们可以执行以下操作:

  • 最大化窗口(使用--start-maximized开关);
  • 全屏显示(F11在Windows Control+Cmd+F上为-key,在Mac 上为- 键,使用--start-fullscreen开关)。
  • 注意:可在此处找到Chrome命令行开关的完整列表。

您的代码应如下所示:

// Setting your Chrome options (Desired capabilities)
ChromeOptions options = new ChromeOptions();
options.add_argument('--start-maximized');
options.add_argument('--start-fullscreen');

// Creating a driver instance with the previous capabilities
WebDriver driver = new ChromeDriver(options);

// Load page & take screenshot of full-screen page
driver.get("http://google.com");
File scrFile = ((TakesScreenshot)driver).getScreenshotAs(OutputType.FILE);

现在关于整版的问题,所有的驱动程序(chromedrivergeckodriverIEDriverEdgeDriver,等)正在实施的webdriver
W3C
标准。因此,它们取决于WebDriver团队希望公开不同功能的功能的方式,在我们的例子中为“ Take
Screenshot”。

如果您阅读该定义,则它明确指出以下内容:

“获取屏幕截图”命令获取顶级浏览上下文的 VIEWPORT 的屏幕截图。

从旧的角度来看,某些驱动程序能够生成完整的屏幕截图(在此处了解更多信息),例如旧的FirefoxDriver,IEDriver等。现在已经不再是这样了,因为它们现在都实现了WebDriver
W3C标准。



 类似资料:
  • 问题内容: 是否可以使用JavaScript截取网页的屏幕截图,然后将其提交回服务器? 我不太担心浏览器的安全性问题。等,因为实施将针对HTA。但是有可能吗? 问题答案: 我已经通过使用ActiveX控件为HTA完成了此操作。在VB6中构建控件以截取屏幕截图非常容易。我必须使用keybd_event API调用,因为SendKeys无法执行PrintScreen。这是该代码: 这只会使您到达将窗口

  • 在selenium web驱动程序中,我无法使用testng和maven将其显示在控制台中 JAVAlang.VerifyError:(类:junereleasemain/NewTest,方法:testFirstResult签名:()V)java函数的参数不兼容。朗,同学们。java上的getDeclaredMethods0(本机方法)。朗,同学们。java上的privateGetDeclared

  • 我有一个有30行的tableView,我还有一个位于tableView顶部的视图(不在tableView标题中),我想捕获屏幕的完整屏幕截图,包括视图和tableView的所有行,但我只能捕获tableView和视图的可见行。请帮助我,提前谢谢。这是我的代码和模拟器的屏幕截图。注意(我不希望我的视图位于tableview标题中,因为当我们滚动tableview时,它也会滚动,这就是为什么视图是固定

  • 问题内容: 我想实现一个Java方法,该方法以URL作为输入并将整个网页(包括CSS,图像,JS(所有相关资源))存储在磁盘上。我已经使用Jsoup html解析器来获取html页面。现在,我想实现的唯一选择是使用jsoup获取页面,现在解析html内容并将相对路径转换为绝对路径,然后再次请求获取javascript,图像等并将其保存在磁盘上。我还阅读了有关HTML清洁器,htmlunit解析器的

  • 我想实现一个java方法,它将URL作为输入,并将包括css、图像、js(所有相关资源)在内的整个网页存储在我的磁盘上。我已经使用Jsoup html解析器来获取html页面。现在,我想实现的唯一选项是使用jsoup获取页面,现在解析html内容,将相对路径转换为绝对路径,然后发出另一个获取javascript、图像等的请求。并将它们保存在磁盘上。我也读过html cleaner和htmlunit

  • 我试图创建一个通用的网络爬虫,将去一个网站和截图。我使用的是Python、Selnium和PhantomJS。问题是截图并没有捕获页面上的所有图像。例如,如果我去you tube,它不会捕捉主页图像下面的图像。(我没有足够高的rep来发布屏幕截图)我认为这可能与动态内容有关,但我已经尝试了等待函数,如隐式等待和on set_page_load_timeout方法。因为这是一个通用的爬虫,我不能等待