介绍
Selenium 是最广泛使用的开源 Web UI(用户界面)自动化测试套件之一。Selenium 支持的语言包括C#,Java,Perl,PHP,Python 和 Ruby。目前,Selenium Web 驱动程序最受 Python 和 C#欢迎。 Selenium 测试脚本可以使用任何支持的编程语言进行编码,并且可以直接在大多数现代 Web 浏览器中运行。在爬虫领域 selenium 同样是一把利器,能够解决大部分的网页的反爬问题,但也不是万能的,它最明显的缺点就是速度慢。
2. 环境搭建
2.1 安装 Selenium
安装方法直接使用pip安装即可,老生常谈了
pip install selenium
2.2 安装浏览器驱动
Selenium 需要一个驱动程序来与所选的浏览器进行交互。所以我们先把驱动安装上,每个浏览器都有对应的驱动。以下列举几个常用的浏览器以及驱动下载地址。
- Chrome: https://chromedriver.chromium.org/downloads
- Edge: https://developer.microsoft.com/en-us/microsoft-edge/tools/webdriver/
- Firefox: https://github.com/mozilla/geckodriver/releases
- Safari: https://webkit.org/blog/6900/webdriver-support-in-safari-10/
选择驱动时需要注意版本是否与自己浏览器的版本一致,如果不一致可能会导致报错无法运行。下载完驱动后你可以将它解压出来放入系统的 Path 变量中,或者是 Python 根目录。一切准备就绪我们就开始学习之路吧!
3. 基础操作
这里我先把我的骨架写下来,后面的例子中我就当你们也已经写好了骨架。
from selenium import webdriver
from selenium.webdriver.common.by import By
from selenium.webdriver.chrome.service import Service
service = Service('D:\chromedriv\chromedriver_win32\chromedriver.exe')
driver = webdriver.Chrome(service=service)
如果已经配置好了驱动可以直接使用以下骨架
from selenium import webdriver
from selenium.webdriver.common.by import By
from selenium.webdriver.chrome.service import Service
driver = webdriver.Chrome(service=service)
3.1 访问网址
driver.get('https://www.baidu.com/')
3.2 最大化窗口
driver.maximize_window()
- maximize_window:将浏览器窗口最大化
3.3 刷新网页
driver.refresh()
3.4 回退
driver.back()
3.5 前进
driver.forward()
3.6 关闭当前窗口
driver.close()
3.7 退出浏览器
driver.quit()
4. Driver 常用属性
Driver 的属性是非常多的,但我们用的不是很多下面列举以下比较常用的属性。我会以 (>>>) 表示我运行例子后的结果。
4.1 浏览器名称
print(driver.name)
>>> chrome
4.2 网页URL
print(driver.url)
>>> https://www.baidu.com/
4.3 网页标题
print(driver.title)
>>> 百度以下,你知道
4.4 网页源码
print(driver.page_source)
>>> <html>.....</html>
5. 元素定位
在开始学习元素定位之前先了解下网页元素,以及属性等,这些知识可以在 w3cschool 简单了解一下即可。在后面的例子中我就默认你们已经了解了这些。
导入所需的类
from selenium.webdriver.common.by import By
5.1 根据 ID 定位
在网页中ID是唯一的不能重复,所以ID查找经常用于定位表单元素等…
<input id="kw" name="wd" class="s_ipt" value="" maxlength="255" autocomplete="off">
driver.find_element(by=By.ID, value='kw')
5.2 根据 NAME 定位
name 属性常见于表单中。
<input id="kw" name="wd" class="s_ipt" value="" maxlength="255" autocomplete="off">
driver.find_element(by=By.NAME, value='wd')
5.3 根据 XPATH 定位
XPath 是一门在 XML 文档中查找信息的语言。如果你没学过呢也不紧因为浏览器可以帮助我们完成这个任务。
driver.find_element(by=By.XPATH, value='//*[@id="kw"]')
5.4 根据 Css选择器 定位
driver.find_element(by=By.CSS_SELECTOR, value='#kw')
5.5 根据 Class名称 定位
<input id="kw" name="wd" class="s_ipt" value="" maxlength="255" autocomplete="off">
driver.find_element(by=By.CLASS_NAME, value='s_ipt')
5.6 根据 文字(精准) 定位
查找的文字需要与网页元素完全匹配
driver.find_element(by=By.LINK_TEXT, value='hao123').click()
5.7 根据 文字(模糊) 定位
查找的文字不需要与网页元素完全匹配
driver.find_element(by=By.PARTIAL_LINK_TEXT, value='123').click()
5.8 根据 标签 定位
网页中的标签太多了,这个方法使用的比较少,了解一下就好了。
<input id="kw" name="wd" class="s_ipt" value="" maxlength="255" autocomplete="off">
driver.find_element(by=By.TAG_NAME, value='input')
|