有没有办法在启动画面中截取特定元素?我似乎无法找到解决方案,我找到的唯一选择是使用" render.png"它获取整页的屏幕截图,我只需要一个特定的元素,例如" // table"。
我发现我目前正在使用this(硒中的解决方案),Splash似乎更快,开销更少。
非常感谢。
答案 0 :(得分:0)
是的。您可以使用scrapy-splash插件来做到这一点。
https://github.com/scrapy-plugins/scrapy-splash 请阅读“更复杂的Splash Lua脚本示例-通过其CSS选择器获取HTML元素的屏幕截图(需要Splash 2.1+)。请注意参数是如何传递到脚本的:”部分。
您不使用render.png端点,而是使用execute端点并执行lua脚本来获取特定元素的屏幕截图。
我在抓痒的蜘蛛中实现了这一点。
def start_requests(self):
print('parse_start_url')
yield SplashRequest(url, self.parse_result,
endpoint='execute',
args={
'lua_source': script,
'pad': 32,
'css': 'body'
}
)
script = """
-- Arguments:
-- * url - URL to render;
-- * css - CSS selector to render;
-- * pad - screenshot padding size.
-- this function adds padding around region
function pad(r, pad)
return {r[1]-pad, r[2]-pad, r[3]+pad, r[4]+pad}
end
-- main script
function main(splash)
-- this function returns element bounding box
local get_bbox = splash:jsfunc([[
function(css) {
var el = document.querySelector(css);
var r = el.getBoundingClientRect();
return [r.left, r.top, r.right, r.bottom];
}
]])
assert(splash:go(splash.args.url))
assert(splash:wait(0.5))
-- don't crop image by a viewport
splash:set_viewport_full()
local region = pad(get_bbox(splash.args.css), splash.args.pad)
return splash:png{region=region}
end
"""
答案 1 :(得分:0)
您可以使用此:
# This command fetches glfw 3.3.2 from github
# Note the shallow parameter. This means it won't grab all the history.
FetchContent_Declare(glfw
GIT_REPOSITORY "https://github.com/glfw/glfw"
GIT_TAG "3.3.2"
GIT_SHALLOW ON
)
# Now make the glfw target available to link against
FetchContent_MakeAvailable(glfw)
target_link_libraries(foobar PRIVATE glfw)
有关更多详细信息,请查看document