| |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
-> 开发测试 -> selenium的配置与使用 -> 正文阅读 |
|
[开发测试]selenium的配置与使用 |
?参考文献:《python爬虫》-人民邮电出版社 目录 2.2.1 find_element_by_class_name() ?2.2.2 ★find_element_by_xpath() ??2.2.3?find_element_by_tag_name() 1.脚本配置1.1安装selenium在命令行或PyCharm terminal?输入pip install Selenium? ?1.2安装EdgeDriver我用习惯了电脑自带的edge浏览器,这里我就安装EdgeDriver。 首先点击浏览器右上角进入设置,或者直接访问 edge://settings/profiles ,点击关于,可以看到你现在的浏览器的版本,我这里是96.0.1054.29? 然后进入官网Microsoft Edge Driver - Microsoft Edge Developer,因为我是最新版所以直接选择第一个,点击x86即可自动下载。下载完成后将压缩包解压到指定目录,之后就能通过确定路径进行连接了。 2.selenium的使用2.1selenium的创建直接上代码解释。(python格式代码注释比较难看我就用普通格式的代码)
?运行成功后输出源码 2.2selenium查找元素的方法
重点selenium定位元素的格式为:find_element_by_xx(), find_elements_by_xx(),element返回符合条件的单个元素,当出现多个符合条件的元素时,返回的是第一个元素。elements返回的是列表,里面包含所有符合条件的元素;当使用find_element没有查找到元素时,程序将会报错,find_elements没查找到元素会返回空列表,不确定有没有元素时可以使用try-except方法,在之后的例子中我会讲解;如果直接打印element的话会返回这个
这肯定不是我们想要的结果,一般来说我们要的是文本,此时要输出文本的话在元素后面加.text即可打印文本,而文本是该节点的所有文本,包括子节点的文本,我在xpath会讲。下面我以百度为例,讲解如果使用selenium语句获取网页信息。 进入百度,假如我们要爬取热搜词句该怎么做呢? ?选择第一个文本,右击检查可以马上确定该文本在源码中的位置 ?接下来就使用几种常见的方法对文本进行获取。 2.2.1 find_element_by_class_name()?我们看到文本前面有个class属性标签,所以我们可以直接通过find_element_by_class_name()的方法对其获取。 ?问题来了,我们怎么知道看到的这个class名是不是只有一个,或者说是第一个呢?(因为只有在一个元素,或者是第一个元素的情况时使用find_element查找才能找到刚看到的那个)有两个办法,1.在源码一个一个找。2.在源码中使用xpath确定。我们说第二种,回到刚才源码,使用ctrl+F,输入: //span[@class='title-content-title'] 发现他们是有规律的,点击回车可以确定是下一条热搜语句。 ?因此我们可以使用find_elements的方法获取所有热搜语句再进行输出。代码如下。
输出如下 ?2.2.2 ★find_element_by_xpath()同理,如果您已经学会了第一种方式查找的话,那么这种方法肯定难不倒你。 代码如下:?
输出结果跟上面一样 值得一提的是,selenium跟以往的xpath有所区别。比如他无法直接获取元素的属性值,以上面的代码为例,如果你想获取class的值‘title-content-title’的话正常情况直接在xpath路径后面加个/@class即'//span[@class="title-content-title"]/@class'就可以了,但在selenium里必须先获取span的xpath的路径,在通过.get_attribute('class')进行获取。注意加载百度热搜会有两种版本,一种横版,一种竖版,横版竖版的代码会不一样,而selenium启动的是第二个,刚使用get_attribute一直报错找了好一会才发现这个原因。 ? 查找的代码如下:
?还有一点的不同就是如果想获取一个节点下的文本时一般的xpath是在路径下加个'/text()',而selenium他是在找出元素之后加.text。而且,他获取的是这个节点下的所有文本,包括子节点的文本。有什么区别呢?我举个例子: ?用常规xpath的话要这样'//div[@class="job-detail"]/a/text()'获取完进行拼接后去除‘查看地图’,之后再获取'//div[@class="job-detail"]/text()'再拼接,如果地址再详细一点的话这样处理起来比较麻烦,但是selenium一步搞定,最后再用字符串分割去掉后面的‘查看地图’即可。这种方法在之后的爬取拉勾网信息中显得比较方便了。 ??2.2.3?find_element_by_tag_name()没遇到合适的例子,没办法举例,本质上还是跟前面的查找方法一样的,有不懂的地方可以问我。 2.2.4?find_element_by_id()这个我可以跟下面一起讲吗?见2.3.1 2.3selenium的常用动作
2.3.1通过搜索框查找信息同样以百度为例,我们在搜索框右击检查,发现这里有个‘input’,说明我们是可以向里面传递字符串的 假设id为'kw'的元素不止一个,那么我们就使用find_elements_id()进行查找,将返回的元素列表进行输出,如果输出的元素不止一个,那么我们需提升过滤条件,或者使用xpath路径查找。而这里返回的元素是唯一的,因此我们可以直接使用find_element_id(),确定元素后使用send_keys()传递字符串。一般的,‘kw’其实就是'keywords',作为一名合格的程序员,良好的编程习惯不能少,每个变量都应该以其作用来命名。话说回来。传递完参数后我们就点击搜索按钮即可搜索。至于搜索按钮..选中按钮右击检查可看到class名称有个‘btn’,因此可以大概知道这是一个按钮,实际上就是,因为我们通过检查来确定源码位置的,所以他标出来的位置就是目的位置。 ?我们找到这个元素的位置后使用click()就可以完成点击搜索了。下面看一下代码如何实现:
3.总结?学完这些知识点你对selenium有了基本的认识,现在使用selenium爬取一些网页信息已经没什么问题了。在爬取过程中一定要设置时间限制,模拟正常人使用的习惯,爬取一页信息后建议time.sleep()3秒以上,这个根据个人网络配置进行适当修改。否则容易被检测到然后封禁。 |
|
开发测试 最新文章 |
pytest系列——allure之生成测试报告(Wind |
某大厂软件测试岗一面笔试题+二面问答题面试 |
iperf 学习笔记 |
关于Python中使用selenium八大定位方法 |
【软件测试】为什么提升不了?8年测试总结再 |
软件测试复习 |
PHP笔记-Smarty模板引擎的使用 |
C++Test使用入门 |
【Java】单元测试 |
Net core 3.x 获取客户端地址 |
|
上一篇文章 下一篇文章 查看所有文章 |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 | -2024/11/18 4:22:23- |
|
网站联系: qq:121756557 email:121756557@qq.com IT数码 |