Selenium 是什么?一句话,自动化测试工具。它支持各种浏览器,包括 Chrome,Safari,Firefox 等主流界面式浏览器。使
用Selenium可以模拟人工对web浏览器进行自动化操作。
安装Selenium
pip install Selenium
要使用Selenium,还需要下载安装浏览器驱动。
驱动下载
- Edge浏览器: Edge的驱动下载地址 https://developer.microsoft.com/en-us/microsoft-edge/tools/webdriver/#downloads
- chrome浏览器: chromedriver 下载地址:https://chromedriver.chromium.org/
- Firefox浏览器: Firefox的驱动geckodriver 下载地址:https://github.com/mozilla/geckodriver/releases/
配置webdriver(EDGE)
下载Microsoft Edge的webdriver,找到对应版本下载,解压后得到一个msedgedriver.exe
然后可以将msedgedriver.exe放到某个文件夹中,然后将路径配置到环境变量中
配置环境变量
手动创建一个存放浏览器驱动的目录,如: D:\webdriver , 将下载的浏览器驱动文件(例如:chromedriver、geckodriver)
丢到该目录下,接着设置环境变量。
测试是否安装成功
元素定位方法
定位单个元素
selenium提供8种元素定位方式,包括DOM元素id, name和tag等等。它还支持xpath和css选择器。返回结果是元素对象。
接下来将以下面这个html页面为例演示如何使用以上各种定位方法。
通过id定位:
dr.find_element_by_id("kw")
通过name定位:
dr.find_element_by_name("wd")
通过class name定位
dr.find_element_by_class_name("s_ipt")
通过tag name定位:
dr.find_element_by_tag_name("input")
通过css定位,css定位有N种写法,这里列几个常用写法:
dr.find_element_by_css_selector("#kw")
dr.find_element_by_css_selector("[name=wd]")
dr.find_element_by_css_selector(".s_ipt")
dr.find_element_by_css_selector("html > body > form > span > input")
dr.find_element_by_css_selector("span.soutu-btn> input#kw")
dr.find_element_by_css_selector("form#form > span > input")
通过link text定位:
dr.find_element_by_link_text("新闻")
dr.find_element_by_link_text("hao123")
通过partial link text定位(根据link文本模糊查询):
dr.find_element_by_partial_link_text("新")
dr.find_element_by_partial_link_text("hao")
dr.find_element_by_partial_link_text("123")
定位多个元素
selenium还提供了定位多个元素的方法,只需要将find_element_by替换成find_elements_by即可。返回结果是定位元素列
表。
find_elements_by_name
find_elements_by_xpath
find_elements_by_link_text
find_elements_by_partial_link_text
find_elements_by_tag_name
find_elements_by_class_name
find_elements_by_css_selector
操作元素方法
警告框处理
在WebDriver中处理JavaScript所生成的alert、confirm以及prompt十分简单,具体做法是使用 switch_to.alert 方法定位到
alert/confirm/prompt,然后使用text/accept/dismiss/send_keys等方法进行操作。
# 接受警告框
driver.switch_to.alert.accept()
No Leanote account? Sign up now.