我正在尝试使用 Python 在 javascript 渲染的网页上进行动态网页抓取。
1)但是,只有当我缓慢向下滚动页面时,才会加载元素。
我努力了:
driver.execute_script("window.scrollTo(0, Y)")
(这不起作用,因为它只滚动到页面上的某个点,错过了其他结果)
and
driver.execute_script("window.scrollTo(0, document.body.scrollHeight);")
(这不起作用,因为向下滚动到页面末尾时元素不会加载 - 它需要用户缓慢滚动整个页面)
2) 如何让 Selenium 等待所有元素加载完毕后再将它们返回给我?
我知道这个解决方案存在:
myElem = WebDriverWait(browser, delay).until(EC.presence_of_element_located((By.ID, 'IdOfMyElement')))
但是,如果当用户向下滚动页面时结果不断出现,这将如何工作呢?一旦检测到所述元素第一次出现,这段代码不会让 Selenium 停止吗?
使用缓慢向下滚动到页面末尾execute_async_script
:
driver.execute_async_script(
"""
count = 400;
let callback = arguments[arguments.length - 1];
t = setTimeout(function scrolldown(){
console.log(count, t);
window.scrollTo(0, count);
if(count < (document.body.scrollHeight || document.documentElement.scrollHeight)){
count+= 400;
t = setTimeout(scrolldown, 1000);
}else{
callback((document.body.scrollHeight || document.documentElement.scrollHeight));
}
}, 1000);"""
)
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)