#python #selenium-webdriver #web-crawler
#python #selenium-webdriver #веб-сканер
Вопрос:
Я пытаюсь захватить все видимое содержимое страницы в виде текста. Допустим, это один пример.
Если я сохраню исходный код страницы, я не буду захватывать раздел комментариев, потому что он загружен с использованием javascript.
Есть ли способ делать снимки HTML с помощью selenium webdriver? (Желательно выражать с помощью оболочки python)
Ответ №1:
Независимо от того, сгенерирован ли HTML страницы с использованием JavaScript, вы все равно сможете захватить его с помощью driver.page_source
.
Я полагаю, причина, по которой вы не смогли захватить источник раздела комментариев в вашем примере, заключается в том, что он содержится в iframe — чтобы захватить источник html для содержимого внутри фрейма / iframe, вам нужно сначала переключить фокус на этот конкретный фрейм с последующим вызовом driver.page_source
.
Ответ №2:
Этот код сделает снимок экрана всей страницы:
from selenium import webdriver
driver = webdriver.Firefox()
driver.get('https://dukescript.com/best/practices/2015/11/23/dynamic-templates.html')
driver.save_screenshot('screenshot.png')
driver.quit()
однако, если вам просто нужен снимок экрана определенного элемента, вы можете использовать это:
def get_element_screenshot(element: WebElement) -> bytes:
driver = element._parent
ActionChains(driver).move_to_element(element).perform() # focus
src_base64 = driver.get_screenshot_as_base64()
scr_png = b64decode(src_base64)
scr_img = Image(blob=scr_png)
x = element.location["x"]
y = element.location["y"]
w = element.size["width"]
h = element.size["height"]
scr_img.crop(
left=math.floor(x),
top=math.floor(y),
width=math.ceil(w),
height=math.ceil(h))
return scr_img.make_blob()
Где WebElement — это элемент, который вы преследуете. конечно, этот метод требует, чтобы вы импортировали from base64 import b64decode
и from wand.image import Image
обрабатывали обрезку.
Комментарии:
1. Возможно, мой вопрос был неясен, но мне нужно захватить HTML, а не изображение
2. @LetsPlayYahtzee — Словарное определение моментального снимка — это «неофициальная фотография, сделанная быстро, обычно с помощью небольшой портативной камеры». , Пожалуйста, измените свой вопрос, чтобы отразить, что вам нужно захватить HTML, а не изображение.
3. определение @Anil_M «dictionary» также описывает его как технический удар в футболе. Итак, давайте не будем придерживаться словарных определений, потому что они могут не отражать использование термина в другом контексте. HTML snapshot — довольно точный термин, который используется для того, что я спрашиваю, я этого не делал. Посмотрите здесь , например