记录一下最近写的爬虫项目遇到的坑。
项目需要获取网页tag元素的全部内容,但是selenium没有提供这个功能,遂想到js里dom的元素innerHTML。但是问题来了,怎么把js变量保存到python变量中呢?
步骤如下:
1.使用selenium的execute("console.log("相关信息");")将信息输出至浏览器日志系统。
2.使用selenium的driver.get_log("browser")获取浏览器日志。
代码如下:
driver.get("https://www.baidu.com")driver.execute("console.log(document.getElementById("s_kw_wrap"));")content = driver.get_log("browser")[0]print(content) 经过测试,上面的方法是错误的!!!!!并不能够获取到浏览器日志中的内容,原因是浏览器为了安全并不允许读取日志内容!!!所以上面的方法并不能得到浏览器控制台console.log()函数输出的信息。想获得标签只能另寻他法。如下:1.通过运行selenium中的execute_script()函数,使用js将标签内容写入本地,以txt文件的形式存储。
2.读取txt文件,获得标签内容。
第一步代码如下: driver.execute_script( """ //js使用dom技术获取标签 let elements = document.getElementsByClassName("content-wrapper")[0].children; let e_length = elements.length; let content = "" for(let i = 0; i < e_length; i++){ //获取标签内容,保存在content变量中 content += elements[i].innerHTML; console.log(content) } //将标签内容存入本地,此时如果没有指定chrome浏览器下载路径,将下载到默认路径 //更改浏览器默认下载路径见其他博文,很容易改 (function download(filename,content) { var a = document.createElement('a'); var blob = new Blob([content], { 'type': 'application/octet-stream' }); a.href = window.URL.createObjectURL(blob); a.download = filename; a.click(); })("data.txt", content); """ ) 第二步代码如下: with open("./src/data/temp/data.txt", "r", "utf-8-sig") as file: for content in file.readlines(): print(content)至此,从页面读取完整html标签的工作做完。