Selenium WebDriver: 跨浏览器网页截图解决方案 (支持低版本浏览器和 Firefox)
网页截图
try:
print('正在截图,请稍等...')
sleep(2)
# 获取页面大小
if browser.capabilities['browserName'] == 'firefox':
page_width = browser.execute_script('return document.body.scrollWidth')
page_height = browser.execute_script('return document.body.scrollHeight')
else:
page_rect = browser.execute_cdp_cmd('Page.getLayoutMetrics', {})
page_width = page_rect['contentSize']['width']
page_height = page_rect['contentSize']['height']
# 截图配置
screenshot_config = {
'quality': 80,
'format': 'png',
'clip': {
'width': page_width,
'height': page_height,
'x': 0,
'y': 0,
'scale': 1
}}
# 截图
if browser.capabilities['browserName'] == 'firefox':
result = browser.execute_script('return canvas.toDataURL("image/png");')
with open('{}/{}.png'.format(keyword_info_item['name'], keyword), 'wb') as f:
f.write(base64.b64decode(result.split(',')[1]))
else:
result = browser.execute_cdp_cmd('Page.captureScreenshot', screenshot_config)
with open('{}/{}.png'.format(keyword_info_item['name'], keyword), 'wb') as f:
f.write(base64.b64decode(result['data']))
print('截图成功')
print('===============================')
except Exception as e:
print('截图失败')
print(e)
print('===============================')
# 翻页
while True:
for i in range(10):
if check_existence(cmd_dict[cmd_code]):
if cmd_code == 1:
# 百度
browser.execute_script('document.querySelector(".n").click()')
if cmd_code == 2:
# 搜狗
browser.find_element(By.ID, 'sogou_next').click()
if cmd_code == 3:
# 360
browser.execute_script('document.querySelector("#snext").click()')
if cmd_code == 4:
# 必应
browser.execute_script('document.querySelector(".sw_next").click()')
sleep(cNum(3, 5))
break
else:
if i == 9:
print('已到达最后一页')
print('===============================')
break
else:
continue
else:
continue
break
代码解析
-
获取页面大小:
- 对于 Firefox,使用
execute_script获取document.body.scrollWidth和document.body.scrollHeight来获取页面大小。 - 对于其他浏览器,使用
execute_cdp_cmd执行Page.getLayoutMetrics获取页面大小。
- 对于 Firefox,使用
-
截图配置:
quality:截图质量,取值范围为 0-100,默认值为 80。format:截图格式,可以是 'png' 或 'jpeg'。clip:截图区域,这里使用了page_width和page_height来确保截取整个页面内容。
-
截图:
- 对于 Firefox,使用
execute_script执行 JavaScript 代码canvas.toDataURL("image/png");来获取页面截图的 Base64 编码数据。 - 对于其他浏览器,使用
execute_cdp_cmd执行Page.captureScreenshot获取页面截图的 Base64 编码数据。
- 对于 Firefox,使用
-
保存截图:
- 使用
base64.b64decode解码 Base64 编码数据,并将其写入到指定的 PNG 文件中。
- 使用
总结
通过以上方法,您可以使用 Selenium WebDriver 在各种浏览器中进行网页截图,包括低版本浏览器和 Firefox。该方法确保了截图的完整性和可靠性,能够有效地用于网站测试和文档生成等场景。
原文地址: https://www.cveoy.top/t/topic/m2MS 著作权归作者所有。请勿转载和采集!