簡體   English   中英

如何使用 Selenium 和 Screenshot 在 Python 中獲取整頁截圖

[英]How to get a full-page screenshot in Python using Selenium and Screenshot

我正在嘗試獲取完整的屏幕截圖,但無法使其正常工作。 這是我正在使用的代碼:

from Screenshot import Screenshot
from selenium import webdriver
import time

ob = Screenshot.Screenshot()
driver = webdriver.Chrome()
driver.maximize_window()
driver.implicitly_wait(10)
url = "https://stackoverflow.com/questions/73298355/how-to-remove-duplicate-values-in-one-column-but-keep-the-rows-pandas"
driver.get(url)
img_url = ob.full_Screenshot(driver, save_path=r'.', image_name='example.png')
print(img_url)
driver.quit()

但這給了我們一個截屏:

在此處輸入圖像描述

如您所見,這正是驅動程序 window 所顯示的內容,而不是完整的屏幕截圖。 如何調整此代碼以獲得我正在尋找的內容?

以下是如何獲取頁面的完整<body > 屏幕截圖的示例:

from selenium import webdriver
from selenium.webdriver.chrome.service import Service
from selenium.webdriver.chrome.options import Options
from selenium.webdriver.common.by import By
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
import time as t

chrome_options = Options()
chrome_options.add_argument("--no-sandbox")
chrome_options.add_argument('disable-notifications')
chrome_options.add_argument("window-size=1280,720")

webdriver_service = Service("chromedriver/chromedriver") ## path to where you saved chromedriver binary
browser = webdriver.Chrome(service=webdriver_service, options=chrome_options)

url = 'https://stackoverflow.com/questions/7263824/get-html-source-of-webelement-in-selenium-webdriver-using-python?rq=1'


browser.get(url)
required_width = browser.execute_script('return document.body.parentNode.scrollWidth')
required_height = browser.execute_script('return document.body.parentNode.scrollHeight')
browser.set_window_size(required_width, required_height)
t.sleep(5)
browser.execute_script("window.scrollTo(0,document.body.scrollHeight);")
required_width = browser.execute_script('return document.body.parentNode.scrollWidth')
required_height = browser.execute_script('return document.body.parentNode.scrollHeight')
browser.set_window_size(required_width, required_height)
t.sleep(1)
body_el = WebDriverWait(browser,10).until(EC.element_to_be_clickable((By.TAG_NAME, "body")))
body_el.screenshot('full_page_screenshot.png')
print('took full screenshot!')
t.sleep(1)
browser.quit()

Selenium 設置適用於 linux,但只需注意導入,以及定義瀏覽器后的部分。 上面的代碼從一個小的 window 開始,然后它最大化它以適應整個頁面正文,然后它等待一段時間並再次計算正文大小,只是為了考慮一些腳本在用戶輸入中的作用。 然后它會截取屏幕截圖 - 經過測試並在一個非常長的頁面上工作。

要使用Selenium-Python客戶端獲取整頁屏幕截圖,您可以使用基於GeckoDriversave_full_page_screenshot()方法,如下所示:

  • 代碼:

     driver = webdriver.Firefox(service=s, options=options) driver.get('https://stackoverflow.com/questions/73298355/how-to-remove-duplicate-values-in-one-column-but-keep-the-rows-pandas') driver.save_full_page_screenshot('fullpage_gecko_firefox.png') driver.quit()
  • 截屏:

fullpage_gecko_firefox


tl; 博士

[py] 為 Firefox 添加整頁截圖功能

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM