selenium获取浏览器tag全部内容(包括标签)

记录一下最近写的爬虫项目遇到的坑。

项目需要获取网页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标签的工作做完。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值