在学习和对比的过程中, 发现其实有很大的共同点, 但是有很细微的差别, 一不小心就踩到坑了

selenium 是什么?

selenium 是我们UI自动化中常用的一个库, 用它来实例化一个driver 对象, 这个 dirver 对象来模拟我们人使用浏览器上网操作, 其中 对于元素的定位方式, 常用的也是 css 选择器和 xpath 路径, 对应爬虫中使用的 bs4 和 xpath . 和爬虫相比, UI自动化就是白盒,我们看着页面源码写的,不受到反爬机制的限制, 对于验证码那些部分都有专门的万能验证码, 一般是公司内部对功能 测试的自动化脚本补充,常用于回归测试, 提高测试效率.

selenium 和 爬虫中的bs4 , xpath 定位相同和不同点?

其中很多都是共通的, bs4 就可以直接使用 css 选择器, soup.select() 里就能接使用后代选择器那些, 定位成功后返回的是一组列表.
etree 实例化的对象, 使用的是 xpath 路径定位, 返回的也是一组列表.
这两个对应 selenium 中的 driver.find_elements(css/xpath) , 返回的是列表

略有不同的是 selenium中定位成功后获取到的元素, 不管是通过 css 还是 xpath , 都可以 element.text获取文本 信息, 但都无法用element[key] 获取这个元素的属性信息, 会报错的.

但是在 爬虫中, bs4 可以通过 css 选择器定位到的元素, 可以 element.text 获取文本, 也可以使用 element[key] 获取指定的属性, 但是在 etree实例化的对象中, 定位成功后的元素, 可以element.text 获取文本, 但是如果使用 element[key] 就会报错

总结: 定位方法类似, 但是要获取属性, 只有爬虫中的bs4 定位成功后用element[key]能拿到, 而爬虫中的xpath路径里 path/@attribute 能直接获取属性, 但是不允许 ele = etree(xpath) , ele[key] , 这样获取属性会报错, 只能通过 xpath表达式来获取属性. 这种xpath表达式放在slenium定位中, 是用不了的.