html2img_ping.py 4.2 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485
  1. # coding=utf-8
  2. from time import sleep
  3. from selenium import webdriver
  4. from selenium.webdriver.chrome.service import Service
  5. import img_pdf_png
  6. def scroll_page(driver):
  7. # 设置滚动条缓慢滚动
  8. page_height = driver.execute_script('return document.body.scrollHeight') # 页面高度
  9. print(page_height)
  10. # web_height = driver.execute_script("return window.innerHeight") # 网页可见内容的高 原先用页面高度作为滚动条的滑动高度,会导致页面错乱
  11. web_height = 300 # 网页可见内容的高 原先用页面高度作为滚动条的滑动高度,会导致页面错乱
  12. n1 = page_height // web_height
  13. last_height = page_height % web_height
  14. print(last_height)
  15. driver.execute_script("document.documentElement.style.overflowY = 'hidden'")
  16. if n1 > 0: # 判断是否需要滚动
  17. for j in range(n1):
  18. # print(r"j:{}".format(j))
  19. if j == n1 - 1 and last_height > 0: # 截取尾部
  20. driver.execute_script("window.scrollBy(0,{})".format(page_height)) # 滚动条滚到底
  21. print("滚到底了")
  22. else:
  23. driver.execute_script("window.scrollBy(0,{})".format(web_height))
  24. # print(web_height)
  25. sleep(1)
  26. new_page_height = driver.execute_script('return document.body.scrollHeight') # 页面高度
  27. if new_page_height > page_height:
  28. scroll_page(driver)
  29. def html2img(driver, image_folder):
  30. page_width = driver.execute_script('return document.documentElement.scrollWidth')
  31. # page_width = 800
  32. driver.execute_script("$('#app #tipsAlert').next().css('display', 'none')") # 隐藏置顶图标
  33. window_height = driver.execute_script("return window.screen.height") # 屏幕高度
  34. driver.set_window_size(page_width, window_height) # 设置浏览器宽高
  35. scroll_page(driver)
  36. driver.execute_script("document.body.scrollTop = document.documentElement.scrollTop = 0") # 滚动条滚到底
  37. page_height = driver.execute_script('return document.body.scrollHeight') # 页面高度
  38. print("浏览器宽{} 浏览器高度{} 网页实际总高度{}".format(page_width, window_height, page_height))
  39. web_height = driver.execute_script("return window.innerHeight") # 网页可见内容的高 原先用页面高度作为滚动条的滑动高度,会导致页面错乱
  40. n1 = page_height // web_height
  41. print("当前窗口网页高度{}".format(web_height))
  42. last_height = page_height % web_height
  43. print("底部多出来的部分{}".format(last_height))
  44. margin_flag = False
  45. if n1 == 0 or (n1 == 1 and last_height == 0): # 判断是否需要滚动
  46. driver.get_screenshot_as_file(r'{}/{}.png'.format(image_folder, '0')) # 指定截图保存位置
  47. else:
  48. j = 0
  49. while j <= n1:
  50. if j == 0:
  51. driver.execute_script("window.scrollBy(0,0)")
  52. # print(0)
  53. elif j == n1 and last_height > 0: # 截取尾部
  54. driver.execute_script("$('#app #resetcss').css('margin-bottom', '{}px')".format(web_height))
  55. driver.execute_script("window.scrollBy(0,{})".format(web_height)) # 滚动条滚到底
  56. print("拉到底拉")
  57. else:
  58. driver.execute_script("window.scrollBy(0,{})".format(web_height))
  59. sleep(1)
  60. driver.save_screenshot(r'{}/{}.png'.format(image_folder, j)) # 截屏
  61. j = j + 1
  62. # 调用截图函数
  63. if __name__ == "__main__":
  64. # 创建一个 Chrome WebDriver 实例
  65. options = webdriver.ChromeOptions()
  66. options.add_argument("headless")
  67. # options.add_argument(" window-size=1920,1080")
  68. # s = Service(executable_path='/Users/xiexiaoyuan/Downloads/chromedriver_mac64_111/chromedriver')
  69. s = Service(executable_path='E:/chromedriver-win64/chromedriver.exe')
  70. driver = webdriver.Chrome(service=s, options=options)
  71. # driver.maximize_window()
  72. driver.get('https://ficc.hzinsights.com/reportshare_crm_report?code=4e38d30e656da5ae9d3a425109ce9e04')
  73. sleep(5)
  74. image_folder = './imgs'
  75. output_file = './screenshot'
  76. file_name = 'output1'
  77. html2img(driver, image_folder)
  78. img_pdf_png.merge_images(image_folder, output_file, file_name)
  79. driver.quit()