前言
最近学校要求完成创新创业知识的网课,但是自己并不想把时间花在这些无所谓的刷课上,于是就想着用python写一个自动刷课的脚本,在查阅了资料后,决定选择Selenium4去做。此系列博客也是记录自己的学习经历,和遇到的困难。
一、Selenium是什么?
Selenium是一个用于Web应用程序测试的工具,Selenium测试直接运行在浏览器中,就像真正的用户在操作一样。支持的浏览器包括IE(7, 8, 9, 10, 11),Mozilla Firefox,Safari,Google Chrome,Opera,Edge等; 支持的开发语言有Java、Python、C#、ruby,更多详情可以查阅官方参考文档。
二、使用步骤
1.Selenium环境配置
pip install selenium -i https://pypi.tuna.tsinghua.edu.cn/simple #使用清华镜像网站安装
还需要安装对应浏览器的驱动,可以参考其他博主文章。
2.导入库
from selenium import webdriver
3.初步使用Selenium
以Edge浏览器访问百度网站为例
driver = webdriver.Edge() #创建一个浏览器对象
driver.get('https://baidu.com/') #访问百度首页
driver.quit() #关闭浏览器
以上代码可以访问百度的首页,成功访问网站后我们可以与各种各样的浏览器元素进行交互, 但是交互的前提是可以在网页中定位到这些浏览器元素。
4.定位浏览器元素(WebElement)
Selenium4在 WebDriver 中有 8 种不同的内置元素定位策略:
| 定位方法 | 要求 |
|---|---|
| class name | 定位class属性与搜索值匹配的元素(不允许使用复合类名) |
| css selector | 定位 CSS 选择器匹配的元素 |
| id | 定位 id 属性与搜索值匹配的元素 |
| name | 定位 name 属性与搜索值匹配的元素 |
| link text | 定位link text可视文本与搜索值完全匹配的锚元素 |
| partial link text | 定位link text可视文本部分与搜索值部分匹配的锚点元素。如果匹配多个元素,则只选择第一个元素。 |
| tag name | 定位标签名称与搜索值匹配的元素 |
| xpath | 定位与 XPath 表达式匹配的元素 |
更多详细的描述可以查阅官方文档中的相关部分。
如果我们想要在百度首页上定位搜索栏的位置
我们可以打开Edge浏览器自带的抓包工具
Fn+F12
可以看到搜索栏的浏览器元素信息
<input type="text" class="s_ipt" name="wd" id="kw" maxlength="100" autocomplete="off">
我们可以使用class、name、id等去定位,方法虽多但是当一个元素拥有id的属性时还是优先用id定位,因为id是唯一的。 通过调用driver对象的find_element()方法进行元素查找。
from selenium import webdriver
from selenium.webdriver.common.by import By #引入这个包是因为其中封装了Selenium的定位方式
driver.get('https://baidu.com/')
element = driver.find_element(By.ID, 'kw')
同理,通过class、name等同样可以定位搜索栏
element = driver.find_element(By.CLASS_NAME, 'wd') #通过class查找
element = driver.find_element(By.NAME, 's_ipt') #通过name查找
定位到元素后就可以与该浏览器元素进行交互 例如: 向搜索栏输入:三峡大学
element.send_keys('三峡大学')
完整代码如下:
from selenium import webdriver
from selenium.webdriver.common.by import By
from time import sleep
driver = webdriver.Edge()
driver.get('https://baidu.com/')
element = driver.find_element(By.ID, 'kw')
element .send_keys('三峡大学')
sleep(4) #需进行sleep否侧浏览器会立马关闭,导致无法看见现象
driver.quit()
代码执行后可以得到如下界面
总结
此篇是我的第一篇文章,希望能以此为突破口,在平台上和其他同学一起学习、交流。此系列后续文章将会更加深入Selenium4,包括但不限于更多的元素交互,操作窗口的转移,iframe内的元素查找,后续也会更新自己的学习Selenium4的成果与经验教训。