javascript - 获取整个页面的屏幕截图并隐藏顶部导航栏无法按预期工作(Selenium,Python3)
问题描述
在阅读此StackOverflow 链接中的答案后,我找到了一种获取整个页面屏幕截图的方法。
此解决方案的问题是我试图在每次滚动时隐藏顶部导航栏,但代码似乎没有正确执行此操作..
我想隐藏它的原因是因为它在每个屏幕截图的顶部隐藏了页面的一部分。
在我的代码中,我遍历了一组页面,并且我为所有这些页面做着完全相同的工作。在某些情况下,它会隐藏顶部栏,而在其他一些页面中,它根本没有顶部栏。所以生成屏幕截图的代码看起来不是很稳定。
这是生成屏幕截图的代码的相关部分:
# loop all pages
j = 0
while j < len(all_pages):
browser.get(base_url + all_pages[j])
total_width = browser.execute_script("return document.body.offsetWidth")
total_height = browser.execute_script("return document.body.parentNode.scrollHeight")
viewport_width = browser.execute_script("return document.body.clientWidth")
viewport_height = browser.execute_script("return window.innerHeight")
rectangles = []
i = 0
while i < total_height:
ii = 0
top_height = i + viewport_height
if top_height > total_height:
top_height = total_height
while ii < total_width:
top_width = ii + viewport_width
if top_width > total_width:
top_width = total_width
rectangles.append((ii, i, top_width,top_height))
ii = ii + viewport_width
i = i + viewport_height
stitched_image = Image.new('RGB', (total_width, total_height))
previous = None
part = 0
for rectangle in rectangles:
if not previous is None:
browser.execute_script("window.scrollTo({0}, {1})".format(rectangle[0], rectangle[1]))
time.sleep(0.2)
browser.execute_script("document.getElementById('header-container').setAttribute('style', 'position: absolute; top: 0px;');")
time.sleep(0.2)
time.sleep(0.2)
file_name = "part_{0}.png".format(part)
browser.get_screenshot_as_file(file_name)
screenshot = Image.open(file_name)
if rectangle[1] + viewport_height > total_height:
offset = (rectangle[0], total_height - viewport_height)
else:
offset = (rectangle[0], rectangle[1])
stitched_image.paste(screenshot, offset)
del screenshot
os.remove(file_name)
part = part + 1
previous = rectangle
stitched_image.save("C:\\Users\\marialena\\source\\repos\\HTMLtoPDF\\all_files\\" + all_pages[j] + ".png",)
j = j + 1
browser.quit()
这是脚本执行后生成的两个屏幕截图:
有人可以帮我理解为什么它只隐藏导航栏几次吗?它是否需要重置变量?
解决方案
推荐阅读
- apache-spark - Spark驱动程序以集群模式登录边缘节点
- java - TemplateResolver 未添加到 TemplateEngine
- python - Python pip 搞砸了
- ios - “参数传递给不带参数的调用”实例化 HKWorkoutRouteQuery
- angularjs - ng-model for `
我将 AngularJS 用于一个简单的网络。我正在训练配置表单验证,但在模型中存储输入的 de 值时遇到问题。
代码是这样的
<div class="login-form"> {{login}} <form name="l
- elasticsearch - 多匹配不适用于恒定分数
- jquery - JQuery:使用刚刚由 Click 函数添加的鼠标输入选择器
- python - 如何用 iterparse 编写?
- kendo-ui - Kendo UI 样式在 .NET Core 中不起作用
- angular - 从服务器角度重新加载数据