【Selenium】使用ChromeDriver实现页面快照截图

效果图

以下为编写流程,全代码+注释在文章末尾
在这里插入图片描述


下载插件

1. 下载Chrome浏览器版本和ChromeDriver

谷歌版本号114以上版本chrome、chromedriver、chrome-headless-shell下载地址:https://googlechromelabs.github.io/chrome-for-testing/known-good-versions-with-downloads.json

本文章使用Chrome、ChromeDriver版本 126.0.6478.182

2. Maven配置依赖

<dependencies>
    <dependency>
        <groupId>org.seleniumhq.selenium</groupId>
        <artifactId>selenium-java</artifactId>
        <version>4.0.0</version>
    </dependency>

    <!-- Maven dependency for Commons IO -->
    <dependency>
        <groupId>commons-io</groupId>
        <artifactId>commons-io</artifactId>
        <version>2.8.0</version>
    </dependency>

    <dependency>
        <groupId>com.google.guava</groupId>
        <artifactId>guava</artifactId>
        <version>27.0-jre</version>
    </dependency>
</dependencies>

Java代码

3. 设置属性/配置

注意1:设置Chrome和ChromeDriver路径时,我直接将两文件放在项目根目录下得出此路径。如放在其他路径下需写全路径/相对路径。

例如 E:\SG_Company\Selenium1\chromedriver-win64\chromedriver.exe

//浏览器的安装后位置,如果是默认安装路径,这句话可以省略
System.setProperty("webdriver.chrome.bin","chrome-win64/chrome.exe");
//设置下载的驱动路径,Windows对应chromedriver.exe Linux对应chromedriver,具体路径看你把驱动放在哪
System.setProperty("webdriver.chrome.driver","chrome-win64/chromedriver.exe");

//设置Chrome参数对象
ChromeOptions options = new ChromeOptions();
//ssl证书支持
options.setCapability("acceptSslCerts", true);
//截屏支持
options.setCapability("takesScreenshot", true);
//css搜索支持
options.setCapability("cssSelectorsEnabled", true);
//不打开真实浏览器而使用虚拟浏览器执行操作  =  options.addArguments("headless");
options.setHeadless(true);
//me : 禁用沙箱模式,Chrome在没有真正的权限的情况下也可以运行 = options.addArguments("no-sandbox");
options.setCapability("sandbox",false);

//设置浏览器参数
//允许所有请求
options.addArguments("--remote-allow-origins=*");
//设置Webdriver启动chrome为默认用户的配置信息(包括书签、扩展程序等),否则将以默认空白配置启动Chrome
//如果需要ChromeDriver执行插件,则需要加上配置信息
options.addArguments("user-data-dir=C:/Users/xxxx/AppData/Local/Google/Chrome for Testing/User Data");
//禁用信息栏,信息栏通常用于显示非阻塞的通知和提示信息
options.addArguments("disable-infobars");
//禁用浏览器中的弹出窗口拦截功能。这个参数允许Selenium脚本在执行过程中不会因为浏览器拦截弹出窗口而导致测试失败或脚本执行异常,通过禁用弹出窗口拦截,可以确保测试脚本能够正常地处理那些需要用户手动允许的弹出窗口,从而保证测试的顺利进行
options.addArguments("--disable-popup-blocking");
//禁用GPU加速可以减少资源消耗,但是整体上来说禁不禁用都可以 
//options.addArguments("--disable-gpu");

//打开ChromeDriver
ChromeDriver driver = new ChromeDriver(options);
//设置超时,避免有些内容加载过慢导致截不到图
//指定页面加载的超时时间。定义WebDriver等待页面完全加载完成的最长时间为30秒,如果在这个时间内页面没有完全加载完成,WebDriver将会抛出一个超时错误
driver.manage().timeouts().pageLoadTimeout(30, TimeUnit.SECONDS);
//设置全局隐式等待时间。WebDriver在查找页面元素时,如果元素未立即出现,WebDriver将等待指定的时间以寻找该元素。
//如果这30秒内元素被找到,那么WebDriver将继续执行后续的操作;如果30秒后元素仍未出现,那么WebDriver将抛出NoSuchElementException异常。
//隐式等待是全局设置的,意味着它会影响到WebDriver实例中执行的所有元素查找操作。
driver.manage().timeouts().implicitlyWait(30, TimeUnit.SECONDS);
//脚本执行超时,设置JavaScript执行超时时间。具体来说,这个方法设置了WebDriver执行JavaScript脚本的最大等待时间
driver.manage().timeouts().setScriptTimeout(30, TimeUnit.SECONDS);

4. 访问登录地址,判断cookie是否有效,有效直接读,无效写入新的cookie存储并返回

注意1:这里checkCookieValied是我自己尝试判断是否过期,直接拿时间对比。实际运用中Cookie基本被加密无法破解,也可以直接调用公司的 “判断是否有效” 方法

注意2:此处redis写得不够详细,具体存储位置可根据个人选择编写

static private final String LoginURL = "https://xxxx/xxx/public/login/login.html";

driver.get(LoginURL);
( checkCookieValied() ? readCookieFile() : writeCookieFile(driver) ).forEach( (c) -> driver.manage().addCookie(c));

/**
  * 判断 Cookie没有过期,如果过期拿新的 Cookie并存储
  * @return True没过期  False过期了
  */
public boolean checkCookieValied(){
   
   
    //获取redis中的cookie 这里方便测试我就直接创建新cookie对象了
    //Set<Cookie&
### 回答1: 可以使用 Python 的第三方库 "Selenium" 来实现页面快照Selenium 可以模拟浏览器行为,通过它可以访问网页并执行 JavaScript。 可以这样做: 1. 安装 Selenium: `pip install selenium` 2. 下载并安装对应浏览器的驱动,如 ChromeDriver 3. 使用 Selenium 和驱动打开浏览器并访问网页 4. 使用 Selenium 提供的方法对页面进行截图 例如: ``` from selenium import webdriver # 创建浏览器对象 browser = webdriver.Chrome() # 访问网页 browser.get('https://www.example.com') # 截图 browser.save_screenshot('screenshot.png') # 关闭浏览器 browser.quit() ``` 请注意,需要环境支持,如安装好相应的浏览器,驱动,等。 ### 回答2: Python 页面快照指的是使用Python编程语言来实现网页的截图功能。实现页面快照可以有多种方法,以下是一种常见的实现方式: 1. 安装必要的库:首先,在Python中安装必要的库,如selenium和webdriver。通过使用这些库,可以模拟浏览器的功能,并通过Python代码来操作浏览器。 2. 实例化一个浏览器对象:在代码中,使用selenium库来实例化一个浏览器对象,可以选择使用不同的浏览器,如Chrome或Firefox。通过这个对象,可以使用Python代码来控制浏览器的行为。 3. 打开网页:使用浏览器对象打开需要截图的网页,可以通过指定URL或者本地路径的方式来加载网页。 4. 调整窗口大小:根据需要,可以使用代码来调整浏览器窗口的大小,以确保页面截图的完整性。 5. 保存截图使用浏览器对象的截图功能,将页面截图保存为文件,可以指定保存的路径和文件名。 6. 关闭浏览器:完成截图后,使用代码关闭浏览器对象,释放资源。 使用Python实现页面快照功能可以广泛应用于各种场景,如网页测试、网页监控、网页内容抓取等。通过自动化的方式来截图,可以提高效率,并减少人工操作的错误。在实现过程中,可以根据具体需求来定制代码,以适应不同的应用场景。 ### 回答3: Python实现网页快照可以通过使用第三方库来实现。一个常用的库是Selenium,它是一个自动化测试工具,可以用来模拟用户在网页上的操作。下面简要介绍一下如何使用Selenium实现网页快照。 首先,需要安装Selenium库,可以使用pip命令进行安装:`pip install selenium` 接下来,还需要下载相应的浏览器驱动,Selenium需要与浏览器进行交互来加载网页。例如,如果使用Chrome浏览器,需要下载对应的Chrome驱动,并配置好驱动的环境变量。 接下来,引入Selenium库,并创建一个浏览器实例: ```python from selenium import webdriver # 创建Chrome浏览器实例 browser = webdriver.Chrome() ``` 然后,使用浏览器实例打开需要截取快照的网页: ```python # 打开网页 browser.get('https://www.example.com') ``` 接着,使用浏览器实例进行网页快照的截取: ```python # 截取网页快照 browser.save_screenshot('screenshot.png') ``` 最后,关闭浏览器实例: ```python # 关闭浏览器 browser.quit() ``` 通过以上几个简单的步骤,就可以使用Python和Selenium实现网页快照了。快照会被保存为一个图片文件,可以用于后续的分析和处理。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值