python - 使用 python 和 selenium 从网页的一部分截取屏幕截图
问题描述
我已经能够将屏幕截图捕获为某些元素的 png,例如使用以下代码的元素
from selenium import webdriver
from PIL import Image
from io import BytesIO
from os.path import expanduser
from time import sleep
# Define url and driver
url = 'https://www.formula1.com/'
driver = webdriver.Chrome('chromedriver')
# Go to url, scroll down to right point on page and find correct element
driver.get(url)
driver.execute_script('window.scrollTo(0, 4100)')
sleep(4) # Wait a little for page to load
element = driver.find_element_by_class_name('race-list')
location = element.location
size = element.size
png = driver.get_screenshot_as_png()
driver.quit()
# Store image as bytes, crop it and save to desktop
im = Image.open(BytesIO(png))
im = im.crop((200, 150, 700, 725))
path = expanduser('~/Desktop/')
im.save(path + 'F1-info.png')
这输出到:
这是我想要的,但不完全是我想要的。我需要手动输入一些向下滚动的内容,因为我无法获得我想要的元素(class='race step-1 step-2 step-3'
),我也不得不手动裁剪图像。
有更好的解决方案吗?
解决方案
万一有人想知道。这就是我最终管理它的方式。首先,我像这样找到并滚动到页面的右侧
element = browser.find_element_by_css_selector('.race.step-1.step-2.step-3')
browser.execute_script('arguments[0].scrollIntoView()', element)
browser.execute_script('window.scrollBy(0, -80)')
然后裁剪图像
im = im.crop((200, 80, 700, 560))
推荐阅读
- r - 如何在 R 中的并行工作人员上直接查找/修改对象
- android - 构建错误:无法读取新项目中未定义的属性“长度”
- tensorflow - 尝试使用 Keras 上的回调保存我的模型时,Sequential' 对象没有属性 '_ckpt_saved_epoch' 错误
- c++ - “如何在 C++ 中不使用反向函数递归调用回文数?”
- python - SQLAlchemy:使用动态创建的名称插入表
- python - 在python中初始化orderdict
- mysql - 在 Self 上使用 IN 子查询优化更新查询
- javascript - 如何解决“画布被跨域数据污染”
- java - 从 Tomcat9 运行的 Spark 驱动程序,无法将文件加载到 java 并行流中的 spark 会话中
- javascript - 更改 VSCode 默认格式化程序以将数组项放在新行上?