1、此方法只适用于能够无头方式运行的浏览器,比如:chrome
def get_image(url,pic_name):
# chromedriver的路径
chromedriver = r"D:\code\FrontDotAutomate_30\util\browser_driver\chromedriver_235.exe"
os.environ["webdriver.chrome.driver"] = chromedriver
#设置chrome开启的模式,headless就是无界面模式
#一定要使用这个模式,不然截不了全页面,只能截到你电脑的高度
chrome_options = Options()
chrome_options.add_argument('headless')
driver = webdriver.Chrome(chromedriver,chrome_options=chrome_options)
#控制浏览器写入并转到链接
driver.get(url)
sleep(1)
#接下来是全屏的关键,用js获取页面的宽高,如果有其他需要用js的部分也可以用这个方法
width = driver.execute_script("return document.documentElement.scrollWidth")
height = driver.execute_script("return document.documentElement.scrollHeight")
print(width,height)
#将浏览器的宽高设置成刚刚获取的宽高
driver.set_window_size(width, height)
sleep(1)
#截图并关掉浏览器
driver.save_screenshot(pic_name)
driver.close()
2、借助PIL库,对多屏进行拼接,适用于所有可以使用selenium吊起的浏览器
def get_scroll_page(driver,query,short_dir):
driver.fullscreen_window() # 全屏窗口
driver.get(url)
window_height = driver.get_window_size()['height'] # 窗口高度
page_height = driver.execute_script('return document.documentElement.scrollHeight') # 页面高度
driver.save_screenshot(r'D:\code\FrontDotAutomate_30\screenshort\screenshort.png')
if page_height > window_height:
n = page_height // window_height # 需要滚动的次数
base_mat = np.atleast_2d(Image.open(r'D:\code\FrontDotAutomate_30\screenshort\screenshort.png')) # 打开截图并转为二维矩阵
for i in range(n):
driver.execute_script(f'document.documentElement.scrollTop={window_height * (i + 1)};')
sleep(.5)
driver.save_screenshot(fr'D:\code\FrontDotAutomate_30\screenshort\screenshort_{i}.png') # 保存截图
mat = np.atleast_2d(Image.open(fr'D:\code\FrontDotAutomate_30\screenshort\screenshort_{i}.png')) # 打开截图并转为二维矩阵
base_mat = np.append(base_mat, mat, axis=0) # 拼接图片的二维矩阵
file_path = short_dir+query+'.png'
print(file_path)
Image.fromarray(base_mat).save(file_path)
driver.quit()