发布时间:2023-09-28 11:30
Selenium是一个Web的自动化测试工具,最初是为网站自动化测试而开发的,就像玩游戏用的按键精灵,可以按指定的命令自动操作。
Selenium测试工具直接操控浏览器中,就像真正的用户在操作一样。Selenium可以根据的指令,让浏览器自动加载页面,获取需要的数据,甚至页面截屏,或者判断网站上某些动作是否发生等。
如图所示,通过Python来控制Selenium,然后让Selenium 控制浏览器,操纵浏览器,这样就实现了使用Python间接的操控浏览器。
Selenium支持多种浏览器,最常见的就是火狐和谷歌浏览器。首先在电脑上下载浏览器,浏览器版本不宜过新。
Selenium具体怎么就能操纵浏览器呢?这要归功于浏览器驱动,Selenium可以通过API接口实现和浏览器驱动的交互,进而实现和浏览器的交互。所以要配置浏览器驱动。
http://npm.taobao.org/mirrors/geckodriver/
https://npm.taobao.org/mirrors/chromedriver/
配置浏览器驱动:
将下载好的浏览器驱动解压,将解压出的exe文件放到Python的安装目录下,也就是和python.exe同目录即可。
安装selenium模块,python借助这个模块驱动浏览器,使用如下命令行安装这个模块即可
pip install selenium
# 打开百度首页
from selenium import webdriver
driver = webdriver.chrome()
url = 'https : / /www.baidu . com/ '
driver.get(url)
#打开get就类似与在浏览器地址栏里面放入网址
driver.get(url)
#退出浏览器
driver.quit()
通过selenium的基本使用可以简单定位元素和获取对应的数据,接下来我们再来学习下定位元素的方法
find_element_by_id #(根据id属性值获取元素)
find_element_by_name #(根据标签的name属性)
find_element_by_class_name #(根据类名获取元素)
find_element_by_link_text #(根据标签的文本获取元素,精确定位)
find_element_by_partial_link_text#(根据标签包含的文本获取元素,模糊定位)
find_e1ement_by_tag_name #(根据标签名获取元素)
find_e1ement_by_xpath #(根据xpath获取元素)
find_element_by_css_selector #(根据css选择器获取元素)
上述方法只能查找页面某个标签元素,如果想获取多个元素可以在element后加字母s,如下所示:
find_elements_by_id #(根据id属性值获取元素,返回一个1ist列表)
find_elements_by_name #(根据标签的name属性,返回一个1ist列表)
find_elements_by_class_name #(根据类名获取元素,,返回一个list列表)
find_elements_by_link_text #(根据标签的文本获取元素,精确定位,返回一个1ist列表)
find_elements_by_partial_link_text #(根据标签包含的文本获取元素,模糊定位,返回一个1ist列表)
find_elements_by_tag_name #(根据标签名获取元素,返回一个1ist列表)
find_elements_by_xpath #(根据xpath获取元素,返回一个1ist列表)
find_elements_by_css_selector #(根据css选择器获取元素,返回一个1ist列表)
以豆瓣首页为例:https://www.douban.com/
from selenium import webdriver
#1.创建浏览器-->对象
driver = webdriver.chrome()
# 2.发送请求
driver.get("https://www.douban.com//")
#3.获取标签<id,class>
#3.1 通过标签的id值获取标签anonv-nav
result1 = driver.find_element_by_id("anony-nav")
#对象print(result1)
# 3.2根据标签的name属性值获取标签
result2 = driver.find_element_by_name( ' description ' )
print(result2)
#3.3通过标签的c1ass属性值获取标签
result3 = driver.find_element_by_class_name( ' anony-nav-7inks ' )
print(result3)
# 3.4通过标签包裹的文本'下载豆瓣App'获取元素列表(精确定位)
resu1t4 = driver.find_element_by_link_text("下载豆瓣App")
print(result4)
#3.5通过标签包裹的文本"豆瓣",获取元素的列表(模糊定位)
result5 = driver.find_element_by_partial_link_text("豆瓣")
print(result5)
# 3.6通过标签名获取元素列表
result6 = driver.find_element_by_tag_name("div")
print(result6)
#3.7 通过xpath获取左上角豆瓣图片的<a>标签
result7 = driver.find_element_by_xpath('/ /*[@id="anony-nav"]/h1/a')
print(result7)
#3.8 通过css选择器获取左上角豆瓣图片的<a>标签
result8 = driver.find_element_by_css_selector(' #anony-nav > h1 > a')
print(result8)
input()
driver.close()
般提取到页面元素,无非就是获取元素包含的文本内容或者元素的属性值,当你通过上述元素提取的方法获取元素以后,可以通过如下方法及属性,获取元素包含的文本以及元素指定的属性值:
send_keys('需要在输入框输入的字符串')#向输入框输入数据
click() # 执行点击操作
text #获取元素包含的文本内容
get_attribute( '属性名')#获取元素的属性值
案例如下:
from selenium import webdriver
driver = webdriver. Chrome()
driver.get("https://www.douban.com/ ")
#通过xpath获取左上角豆瓣图片的<a>标签,提取标签包含的文本内容
"""
text属性,可以提取标签包含的文本内容,支持链式调用
"""
result = driver.find_element_by_xpath('/ /*[@id="anony-nav"]/h1/a' ).text
print(result)
#通过xpath获取左上角豆瓣图片的<a>标签,提取标签的href属性
"""
get_attri bute('属性名')
方法,可以根据属性名提取标签对应该属性的值,支持链式调用
""
resu1t2 = driver.find_element_by_xpath( '//*[@id="anonynav"]/h1/a ').get_attribute('href' )
print(result2)
driver.find_element_by_css_selector('#anony-nav>div.anony-srh>form>span.inp>input[type=text]')
#找到豆瓣的搜索框,输入关键字"肖申克的救赎",点击搜索
"""
send_keys('需要在输入框输入的字符串')# 向输入框输入数据
click()#执行点击操作
"""
input_str = driver.find_element_by_css_selector('#anony-nav>div.anony-srh>form>span.inp>input[type=text]')
input_str.send_keys('肖申克的救赎')
input_click = driver.find_element_by_css_selector('#anony-nav>div.anony-srh>form>span.bn>input[type=submit] ')
input_click.click()
input()
driver.quit()