获取整个页面的屏幕截图并隐藏顶部导航栏无法按预期工作(Selenium,Python3)
Getting screenshot of the whole page and hiding the top nav bar doesn't work as expected (Selenium, Python3)
阅读 Whosebug link 中的答案后,我找到了获取整个页面屏幕截图的方法 link。
这个解决方案的问题是我试图在每次滚动时隐藏顶部导航栏,但代码似乎没有正确地做到这一点..
我之所以要隐藏它是因为它在每个屏幕截图的顶部隐藏了页面的一部分。
在我的代码中,我遍历了一组页面,并且我对所有这些页面都做了完全相同的工作。在某些情况下,它会隐藏顶部栏,而在其他一些页面中,它根本没有顶部栏。所以生成屏幕截图的代码似乎不太稳定。
这是生成屏幕截图的代码的相关部分:
# 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()
这是脚本执行后生成的两个屏幕截图:
无效 - 每次滚动时的顶部栏:
有效 - 仅顶部栏第一次:
谁能帮我理解为什么它只在某些时候隐藏导航栏?它是否需要重置变量?
阅读
这个解决方案的问题是我试图在每次滚动时隐藏顶部导航栏,但代码似乎没有正确地做到这一点..
我之所以要隐藏它是因为它在每个屏幕截图的顶部隐藏了页面的一部分。
在我的代码中,我遍历了一组页面,并且我对所有这些页面都做了完全相同的工作。在某些情况下,它会隐藏顶部栏,而在其他一些页面中,它根本没有顶部栏。所以生成屏幕截图的代码似乎不太稳定。
这是生成屏幕截图的代码的相关部分:
# 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()
这是脚本执行后生成的两个屏幕截图:
无效 - 每次滚动时的顶部栏:
有效 - 仅顶部栏第一次:
谁能帮我理解为什么它只在某些时候隐藏导航栏?它是否需要重置变量?