• selenium自动化测试-获取网页截图


    今天学习下使用selenium自动化测试工具获取网页截图。

    1,如果是简单获取当前屏幕截图只需要使用方法:

    driver.get_screenshot_as_file('screenshot.png')

    2,如果想获取完整网页长宽的截图需要设置参数后使用该方法:

    首先打开驱动方式设置为无界面显示模式

    1. # 打开驱动
    2. def open_driver():
    3. try:
    4. # 连接浏览器web驱动全局变量
    5. global driver
    6. # Linux系统下浏览器驱动无界面显示,需要设置参数
    7. # “–no-sandbox”参数是让Chrome在root权限下跑
    8. # “–headless”参数是不用打开图形界面
    9. chrome_options = Options()
    10. # 设为无头模式
    11. chrome_options.add_argument('--headless')
    12. chrome_options.add_argument('--no-sandbox')
    13. chrome_options.add_argument('--disable-gpu')
    14. chrome_options.add_argument('--disable-dev-shm-usage')
    15. # 连接Chrome浏览器驱动,获取驱动
    16. driver = webdriver.Chrome(chrome_options=chrome_options)
    17. '''
    18. # 此步骤很重要,设置chrome为开发者模式,防止被各大网站识别出来使用了Selenium
    19. options = Options()
    20. # 静默模式(加载浏览器的静默模式,让它在后台偷偷运行)
    21. # options.add_argument('headless')
    22. # 去掉提示:Chrome正收到自动测试软件的控制
    23. options.add_argument('disable-infobars')
    24. # 以键值对的形式加入参数,打开浏览器开发者模式
    25. # options.add_experimental_option('excludeSwitches', ['enable-automation'])
    26. # 打开浏览器开发者模式
    27. # options.add_argument("--auto-open-devtools-for-tabs")
    28. driver = webdriver.Chrome(chrome_options=options)
    29. '''
    30. # driver = webdriver.Chrome()
    31. print('连接Chrome浏览器驱动')
    32. # 浏览器窗口最大化
    33. driver.maximize_window()
    34. '''
    35. 1, 隐式等待方法
    36. driver.implicitly_wait(最大等待时间, 单位: 秒)
    37. 2, 隐式等待作用
    38. 在规定的时间内等待页面所有元素加载;
    39. 3,使用场景:
    40. 在有页面跳转的时候, 可以使用隐式等待。
    41. '''
    42. driver.implicitly_wait(3)
    43. # 强制等待,随机休眠 暂停0-3秒的整数秒,时间区间:[0,3]
    44. time.sleep(random.randint(0, 3))
    45. except Exception as e:
    46. driver = None
    47. print(str(e))

     

    然后设置网页长宽最大化,保证截图是完整的,不会出现滚动条

    S = lambda X: driver.execute_script('return document.body.parentNode.scroll' + X)
    driver.set_window_size(S('Width'), S('Height'))
    driver.get_screenshot_as_file('screenshot.png')

    3,编写代码

    依旧采用拆分步骤细化功能模块封装方法编写代码,便于后续扩展功能模块,代码中缺少的封装方法代码,详情参考之前的《selenium自动化测试》文章。

    1. def spider_screenshot_image(req_dict):
    2. '''
    3. @方法名称: 爬取网页内容截图文件
    4. @中文注释: 爬取网页内容截图文件
    5. @入参:
    6. @param req_dict dict 请求容器
    7. @出参:
    8. @返回状态:
    9. @return 0 失败或异常
    10. @return 1 成功
    11. @返回错误码
    12. @返回错误信息
    13. @param rsp_dict dict 响应容器
    14. @作 者: PandaCode辉
    15. @weixin公众号: PandaCode辉
    16. @创建时间: 2023-09-26
    17. @使用范例: spider_screenshot_image(req_dict)
    18. '''
    19. try:
    20. if (not type(req_dict) is dict):
    21. return [0, "111111", "请求容器参数类型错误,不为字典", [None]]
    22. # 截图目录
    23. screenshot_dir = os.path.join(os.path.dirname(__file__), 'screenshot')
    24. if not os.path.exists(screenshot_dir):
    25. os.makedirs(screenshot_dir)
    26. print('打开浏览器驱动')
    27. open_driver()
    28. # 打开网址网页
    29. print('打开网址网页')
    30. driver.get(req_dict['url'])
    31. # 等待6秒启动完成
    32. driver.implicitly_wait(6)
    33. print('随机休眠')
    34. # 随机休眠 暂停0-2秒的整数秒
    35. time.sleep(random.randint(0, 2))
    36. # 保存当前网页屏幕快照PNG图像文件,截图不保证完整网页内容都截取到
    37. page_file_1 = os.path.join(screenshot_dir, 'page1.png')
    38. isprint = driver.get_screenshot_as_file(page_file_1)
    39. print(isprint)
    40. # 网页长宽最大化,保证截图是完整的,不会出现滚动条
    41. S = lambda X: driver.execute_script('return document.body.parentNode.scroll' + X)
    42. driver.set_window_size(S('Width'), S('Height'))
    43. # 保存当前网页屏幕快照PNG图像文件
    44. page_file_2 = os.path.join(screenshot_dir, 'page2.png')
    45. isprint = driver.get_screenshot_as_file(page_file_2)
    46. print(isprint)
    47. # 章节内容截图
    48. image_file = os.path.join(screenshot_dir, 'content.png')
    49. # 元素定位
    50. elem = driver.find_element(By.ID, req_dict['elem_id'])
    51. print(elem)
    52. # 元素截图
    53. isprint = elem.screenshot(image_file)
    54. print(isprint)
    55. print('关闭浏览器驱动')
    56. close_driver()
    57. print("爬取网页内容截图文件成功")
    58. # 返回容器
    59. return [1, '000000', '爬取网页内容截图文件成功', [None]]
    60. except Exception as e:
    61. print('关闭浏览器驱动')
    62. close_driver()
    63. print("爬取网页内容截图文件异常," + str(e))
    64. return [0, '999999', "爬取网页内容截图文件异常," + str(e), [None]]

     


    4,运行效果

    最后说明:上述文章仅供学习参考,请勿用于商业用途,感谢阅读。

  • 相关阅读:
    知识点终结
    大数据算法系列10:字符串检验算法
    集合(泛型 & List & Set & 自定义排序)
    VOSviewer使用方法(详细便捷)附下载网址
    2023学年持IB成绩申请NTU入学流程指南
    SimpleUI修改icon,icon挑选地址
    查询利器—索引
    使用Optional和直接返回null,哪个更好?
    java版工程管理系统Spring Cloud+Spring Boot+Mybatis实现工程管理系统源码
    Linux内核源码分析 (B.3) 深入理解 Linux 物理内存分配全链路实现
  • 原文地址:https://blog.csdn.net/xionghui2007/article/details/133311837