selenium+python获取页面执行后的数据
关于selenium+python爬取ajax的数据有很多文章已经说明。
大多是利用设置代理直接截取数据。这样的方式配置起来异常繁琐,而且不能与页面已爬取其它数据整合统一处理。
先记录一下场景:
采集的目标页面,不仅采取ajax请求,还对页面关键数据进行了js加密。
即便是采用设置代理方式抓取数据爬取到json数据,也是加密的数据,也需要对页面js进行解密。
本人对js加密了解不深,所以没有再深入。
于是就想到等目标页面元素加载执行完毕后,直接python创建ajax请求转发数据。
经过测试发现selenium 不执行注入的ajax的代码块。
最后解决方案:向页面注入创建新元素的代码,并将需要的数据进行编码设置为新元素的value,执行完毕后通过获取元素值提取出来。
js_str = "var vinput = document.createElement('input');vinput.setAttribute('type','text');vinput.setAttribute('name','vinput');vinput.setAttribute('value',JSON.stringify(lists));document.body.appendChild(vinput);"
try:
driver.execute_script(js_str)
except Exception as e:
print(e)
val = driver.find_element_by_name('vinput').get_attribute('value')