selenium的配置与基本使用(1),2024年最新网易Python面试必问

简介: selenium的配置与基本使用(1),2024年最新网易Python面试必问

正文

url = ‘https://www.baidu.com/

访问网址

driver.get(url)

打印源码

print(driver.page_source)

打印当前网址

print(driver.current_url)

运行完后关闭程序

driver.quit()

运行成功后输出源码

2.2selenium查找元素的方法


selenium常用元素定位方法

| 方法 | 描述 |
| — | — |
| find_element_by_id() | 通过元素id属性定位元素 |
| find_element_by_name() | 通过元素name属性定位元素 |
| find_element_by_class_name() | 通过元素class属性定位元素 |
| find_element_by_css_selector() | 通过css选择器定位元素 |
| find_element_by_link_text() | 通过超链接定位元素 |
| find_element_by_xpath() | 通过xpath定位元素 |
| find_element_by_tag_name() | 通过标签名定位元素 |
| find_elements(By.Type,value) | 通用方法 |
| is_display() | 判断某个元素是否存在 |

重点

**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的方法获取所有热搜语句再进行输出。代码如下。

element如果没有找到元素时,selenium会报错,所以使用try可以避免因未找到元素而终止程序的情况

try:

找第一个符合条件的元素

a = driver.find_element_by_class_name(‘title-content-title’)
print(a.text)
except:
print(‘没有找到该元素!’)

查找所有符合条件的元素

a = driver.find_elements_by_class_name(‘title-content-title’)

如果用elements没找到元素会返回空列表不会报错。

if(len(a) != 0):
for i in a:
print(a.index(i)+1)
print(i.text)
else:
print(‘没有找到该元素!’)

输出如下

2.2.2 ★find_element_by_xpath()

同理,如果您已经学会了第一种方式查找的话,那么这种方法肯定难不倒你。

代码如下:

element如果没有找到元素时,selenium会报错,所以使用try可以避免因未找到元素而终止程序的情况

try:

找第一个符合条件的元素


a = driver.find_element_by_class_name(‘title-content-title’)
a = driver.find_elements_by_xpath(‘//span[@class=“title-content-title”]’)
print(a.text)
except:
print(‘没有找到该元素!’)

查找所有符合条件的元素

a = driver.find_elements_by_class_name(‘title-content-title’)
a = driver.find_elements_by_xpath(‘//span[@class=“title-content-title”]’)

如果用elements没找到元素会返回空列表不会报错。

if len(a):
for i in a:
print(a.index(i) + 1)
print(i.text)
else:
print(‘没有找到该元素!’)

输出结果跟上面一样

**值得一提的是,selenium跟以往的xpath有所区别。**比如他无法直接获取元素的属性值,以上面的代码为例,如果你想获取class的值‘title-content-title’的话正常情况直接在xpath路径后面加个/@class即’//span[@class=“title-content-title”]/@class’就可以了,但在selenium里必须先获取span的xpath的路径,在通过.get_attribute(‘class’)进行获取。注意加载百度热搜会有两种版本,一种横版,一种竖版,横版竖版的代码会不一样。

查找的代码如下:

try:
a = driver.find_element_by_xpath(‘//*[@id=“hotsearch-content-wrapper”]/li[1]/a/span[2]’)
print(a.get_attribute(‘class’))
except:
print(‘没有找到该元素!’)

还有一点的不同就是如果想获取一个节点下的文本时一般的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.4.1

2.3selenium的常用动作

| 方法名 | 描述 |
| — | — |
| move_to_element() | 鼠标悬浮在某元素上 |
| click() | 左键单击元素 |
| double_click() | 左键双击元素 |
| context_click() | 右键单击元素 |
| click_and_hold()         | 长按元素 |
send_keys(str)
|
传入元素
|
以及执行js脚本 driver.execute_script(),设置窗体起始位置driver.set_window_position();

设置窗体大小driver.set_window_size(),driver.maximize_window(),使用句柄等。

2.4selenium实践


2.4.1通过搜索框查找信息

同样以百度为例,我们在搜索框右击检查,发现这里有个‘input’,说明我们是可以向里面传递字符串的

假设id为’kw’的元素不止一个,那么我们就使用find_elements_id()进行查找,将返回的元素列表进行输出,如果输出的元素不止一个,那么我们需提升过滤条件,或者使用xpath路径查找。而这里返回的元素是唯一的,因此我们可以直接使用find_element_id(),确定元素后使用send_keys()传递字符串。一般的,‘kw’其实就是’keywords’,作为一名合格的程序员,良好的编程习惯不能少,每个变量都应该以其作用来命名。话说回来。传递完参数后我们就点击搜索按钮即可搜索。至于搜索按钮…选中按钮右击检查可看到class名称有个‘btn’,因此可以大概知道这是一个按钮,实际上就是,因为我们通过检查来确定源码位置的,所以他标出来的位置就是目的位置。

我们找到这个元素的位置后使用click()就可以完成点击搜索了。下面看一下代码如何实现:

导入包

from selenium import webdriver
if name == ‘main’:

指定路径

driver_path = ‘C:\edgedriver_win64\msedgedriver.exe’

创建driver对象

driver = webdriver.Edge(driver_path)

指定访问网址,如百度

url = ‘https://www.baidu.com/

访问网址

driver.get(url)
str = input(“请输入您想要查找的关键词:”)
try:
kw = driver.find_element_by_id(‘kw’)
kw.send_keys(str)
btn = driver.find_element_by_id(‘su’)
btn.click()
except:
print(‘没有找到该元素!’)

driver.quit()

2.4.2获取浮窗数据

我们以拉勾网为例,进入到招聘信息界面

当我们将鼠标停留在职位名称上面时会弹出这个简略信息的浮窗

而当鼠标移开时浮窗信息也随之消失。右击检查源码,发现他是动态的

为了能够获取浮窗信息我们必须要将鼠标停留在上面才能获取信息,右击检查

发现文本信息在类名为这串代码的节点下

接下来用driver的类名查找元素的办法就能爬取浮窗信息了。我们结合代码分析一下

import time
from selenium import webdriver
from selenium.common.exceptions import NoSuchElementException
from selenium.webdriver import ActionChains
if name == ‘main’:

指定路径

driver_path = ‘C:\edgedriver_win64\msedgedriver.exe’

创建driver对象

driver = webdriver.Edge(driver_path)

# 指定访问网址

driver.get(‘https://www.lagou.com/wn/jobs?labelWords=&fromSearch=true&suginput=&kd=java’)

时间可以适当修改

time.sleep(2)

查找悬停目标元素,如果没找到会抛出异常,所以要用try捕获

try:
move = driver.find_element_by_xpath(‘//div[@class=“item__10RTO”]’) # 查找符合条件的第一个元素
except NoSuchElementException as e:
print(“没有该元素!”)

鼠标悬停至招聘信息中,获取二级页面简略信息

ActionChains(driver).move_to_element(move).perform()

等待两秒再获取浮窗信息,不然可能数据没更新

time.sleep(2)

获取浮窗信息

try:
info = driver.find_element_by_class_name(“job_discription__1qxwN”)

打印浮窗信息

print(info.text)
except NoSuchElementException as e:
print(“没有该元素!”)

成功结果如图:

2.4.3实现翻页功能

我们仍以刚才的界面为例,将滑动条滑到底部找到翻页按钮右击检查寻找其特征发现其在class名为‘lg-pagination-next’的节点下。

复制类名并查找发现就一个,说明我们可以通过它来确定下一页按钮的位置。当没有这个按钮说明是最后一页了我们用try语句捕获异常即可。注意,在翻页的过程中最好先将滚动条滑动至底部再进行翻页操作,因为可能会有广告浮窗影响点击。翻页代码如下:

导入包

import time
from selenium import webdriver
from selenium.common.exceptions import NoSuchElementException
from selenium.webdriver import ActionChains
if name == ‘main’:

指定路径

driver_path = ‘C:\edgedriver_win64\msedgedriver.exe’

创建driver对象

driver = webdriver.Edge(driver_path)

# 指定访问网址

driver.get(‘https://www.lagou.com/wn/jobs?labelWords=&fromSearch=true&suginput=&kd=java’)

定义起始页码

page = 1

定义翻页次数

while page < 6:
try:

时间可以适当修改

time.sleep(2)
pager_next = driver.find_element_by_class_name(“lg-pagination-next”)
driver.execute_script(“scroll(0,2500)”) # 下拉滚动条,拉到底,不然会有弹窗影响点击
time.sleep(1)
driver.find_element_by_class_name(“lg-pagination-next”).click()
except:

没有下一页时则直接关闭

print(“爬取完毕!”)
driver.close()
page += 1

翻页成功如图

最后

Python崛起并且风靡,因为优点多、应用领域广、被大牛们认可。学习 Python 门槛很低,但它的晋级路线很多,通过它你能进入机器学习、数据挖掘、大数据,CS等更加高级的领域。Python可以做网络应用,可以做科学计算,数据分析,可以做网络爬虫,可以做机器学习、自然语言处理、可以写游戏、可以做桌面应用…Python可以做的很多,你需要学好基础,再选择明确的方向。这里给大家分享一份全套的 Python 学习资料,给那些想学习 Python 的小伙伴们一点帮助!

👉Python所有方向的学习路线👈

Python所有方向的技术点做的整理,形成各个领域的知识点汇总,它的用处就在于,你可以按照上面的知识点去找对应的学习资源,保证自己学得较为全面。

👉Python必备开发工具👈

工欲善其事必先利其器。学习Python常用的开发软件都在这里了,给大家节省了很多时间。

👉Python全套学习视频👈

我们在看视频学习的时候,不能光动眼动脑不动手,比较科学的学习方法是在理解之后运用它们,这时候练手项目就很适合了。

👉实战案例👈

学python就与学数学一样,是不能只看书不做题的,直接看步骤和答案会让人误以为自己全都掌握了,但是碰到生题的时候还是会一筹莫展。

因此在学习python的过程中一定要记得多动手写代码,教程只需要看一两遍即可。

👉大厂面试真题👈

我们学习Python必然是为了找到高薪的工作,下面这些面试题是来自阿里、腾讯、字节等一线互联网大厂最新的面试资料,并且有阿里大佬给出了权威的解答,刷完这一套面试资料相信大家都能找到满意的工作。


相关文章
|
19天前
|
Web App开发 前端开发 JavaScript
探索Python科学计算的边界:利用Selenium进行Web应用性能测试与优化
【10月更文挑战第6天】随着互联网技术的发展,Web应用程序已经成为人们日常生活和工作中不可或缺的一部分。这些应用不仅需要提供丰富的功能,还必须具备良好的性能表现以保证用户体验。性能测试是确保Web应用能够快速响应用户请求并处理大量并发访问的关键步骤之一。本文将探讨如何使用Python结合Selenium来进行Web应用的性能测试,并通过实际代码示例展示如何识别瓶颈及优化应用。
64 5
|
18天前
|
数据采集 Web App开发 数据可视化
Python爬虫教程:Selenium可视化爬虫的快速入门
Python爬虫教程:Selenium可视化爬虫的快速入门
|
29天前
|
测试技术 数据安全/隐私保护 开发者
自动化测试的奥秘:如何用Selenium和Python提升软件质量
【9月更文挑战第35天】在软件开发的海洋中,自动化测试是那艘能引领我们穿越波涛的帆船。本文将揭开自动化测试的神秘面纱,以Selenium和Python为工具,展示如何构建一个简单而强大的自动化测试框架。我们将从基础出发,逐步深入到高级应用,让读者能够理解并实现自动化测试脚本,从而提升软件的质量与可靠性。
|
2月前
|
Web App开发 测试技术 持续交付
自动化测试的利器:Selenium与Python的完美结合
【9月更文挑战第21天】在软件开发的世界里,测试是确保产品质量的关键步骤。随着敏捷开发和持续集成的流行,自动化测试工具变得尤为重要。本文将介绍如何使用Selenium和Python进行高效的自动化测试,不仅提供代码示例,还深入探讨如何设计测试用例、选择正确的测试框架、以及如何整合到CI/CD流程中。无论你是初学者还是有经验的开发者,这篇文章都将为你提供宝贵的见解和实用的技巧。
43 3
|
21天前
|
Java C++ Python
【面试宝典】深入Python高级:直戳痛点的题目演示(下)
【面试宝典】深入Python高级:直戳痛点的题目演示(下)
|
24天前
|
设计模式 Unix Python
【面试宝典】深入Python高级:直戳痛点的题目演示(上)
【面试宝典】深入Python高级:直戳痛点的题目演示(上)
|
3月前
|
Web App开发 数据可视化 Python
Python Selenium获取boss直聘招聘信息
Python Selenium获取boss直聘招聘信息
43 5
Python Selenium获取boss直聘招聘信息
|
3月前
|
数据采集 Python
如何用Python Selenium和WebDriver抓取LinkedIn数据并保存登录状态
本文介绍了使用Python Selenium和WebDriver库抓取LinkedIn数据的方法。首先,安装Selenium库和对应的WebDriver,然后配置爬虫代理IP以避免频繁请求被检测。接下来,设置user-agent和cookies以模拟真实用户行为,实现登录并保持状态。登录后,使用WebDriver抓取目标页面数据,如用户名、年龄、性别和简历信息。最后,强调了优化代码、处理异常和遵守使用条款的重要性,以提高效率并避免账号被封禁。
如何用Python Selenium和WebDriver抓取LinkedIn数据并保存登录状态
|
3月前
|
数据采集 人工智能 数据可视化
Python selenium爬虫被检测到,该怎么破?
Python selenium爬虫被检测到,该怎么破?
|
3月前
|
Web App开发 测试技术 API
自动化测试之美:使用Selenium和Python进行Web应用测试
【8月更文挑战第31天】在软件开发的快节奏世界中,自动化测试如同一束明灯,照亮了质量保证之路。本文将引导你通过Selenium和Python的强大组合,探索如何构建高效的Web应用测试框架。我们不仅会讨论理论,还会深入代码,从一个简单的示例开始,逐步扩展至更复杂的场景。无论你是初学者还是有经验的开发者,这篇文章都将为你提供宝贵的见解和实用的技巧。让我们一同揭开自动化测试的神秘面纱,体验它的魅力所在。