一 . 基本使用

一、Selenium的基本特点

  1. 开源与免费:Selenium的源代码开放,用户可以根据需要自由修改和扩展其功能,同时它是完全免费的。
  2. 跨平台与多浏览器支持:Selenium支持多种操作系统(如Windows、Linux、macOS)和主流浏览器(如Chrome、Firefox、Safari、Edge等),这使得它能够在不同的环境中进行自动化测试。
  3. 多语言支持:Selenium支持多种编程语言,如Java、Python、C#、Ruby等,这使得开发者可以根据自己的喜好和项目需求选择合适的语言来编写自动化测试脚本。
  4. 灵活性强:Selenium提供了丰富的API接口,支持各种网页元素操作和事件处理,如点击、输入、获取元素属性等,使得开发者可以灵活地编写自动化测试脚本。
  5. 可扩展性:Selenium支持自定义扩展和插件,开发者可以根据实际需求进行定制,以满足特定的测试需求。

二、Selenium的组成

Selenium主要包括以下几个组件:

  1. Selenium IDE:一个嵌入到Firefox浏览器的插件,用于录制和回放Selenium脚本。虽然它只能在Firefox下使用,但能将录制好的脚本转换成各种Selenium WebDriver支持的程序语言,进而扩展到更广泛的浏览器类型。
  2. Selenium WebDriver:业界通用的测试框架,是Selenium 2.0及以后版本的核心。它直接控制浏览器,支持多种语言和浏览器,提供了一套用于操作浏览器的API。
  3. Selenium Standalone Server:包括Selenium Grid、远程控制、分布式部署等功能,可实现Selenium脚本的高效执行与拓展。利用Grid,自动化测试可以并行运行,甚至在跨平台、异构的环境中运行。

三、Selenium的工作原理

Selenium的工作原理主要是通过WebDriver驱动浏览器,模拟用户的操作行为(如点击、输入、滚动等),然后捕获浏览器渲染后的页面内容,并与预期结果进行比较,从而验证应用程序的功能和界面是否符合要求。

四、Selenium的应用场景

  1. 自动化测试:Selenium是自动化测试领域的重要工具之一,它可以帮助开发者自动执行测试用例,提高测试效率和准确性。
  2. 爬虫开发:Selenium也可以用于爬虫开发,通过模拟用户操作浏览器来获取网页数据。与传统的HTTP请求方式相比,Selenium可以处理更复杂的网页交互和JavaScript渲染。
  3. Web应用自动化:Selenium可以用于自动化Web应用的各种操作,如自动填写表单、自动登录、自动下载文件等。

五、Selenium的优势

  1. 提高了测试效率:自动化测试可以大大缩短测试周期,提高测试效率。
  2. 提高了测试质量:自动化测试可以执行大量的测试用例,覆盖更多的测试场景,从而提高测试质量。
  3. 降低了人力成本:自动化测试可以减少对人工测试的依赖,降低人力成本。
  4. 增强了测试的可靠性:自动化测试可以在无人值守的情况下执行,减少了人为因素对测试结果的影响。

pip install selenium -i http://pypi.douban.com/simple/ --trusted-host pypi.douban.com
from selenium import webdriver # # 驱动浏览器
from selenium.webdriver.common.by import By #选择器
from selenium.webdriver.common.keys import Keys #按键
from selenium.webdriver.support.wait import WebDriverWait #等待页面加载完毕,寻找某些元素
from selenium.webdriver.support import expected_conditions as EC ##等待指定标签加载完毕

1,驱动浏览器

browser = webdriver.Chrome()

2,请求页面 --返回的数据封装在了browser对象里,不需要额外的变量接收

browser.get(‘https://www.baidu.com’) #调用浏览器驱动访问站点

3,拿到输入框

text_input = browser.find_element(By.ID,‘kw’)

4,向输入框中写入内容

text_input.send_keys(‘爬虫’)

5,按下回车按钮

text_input.send_keys(Keys.ENTER)

等待事件 – 怕网速慢
wait = WebDriverWait(browser,100) # 参数1:浏览器对象 参数2:时间(秒)

等待某元素出现 presence_of_element_located()传入的参数格式是一个元组
wait.until(EC.presence_of_element_located((By.ID,‘result_tts_player’)))

print(browser.current_url) #查看url
print(browser.get_cookies()) #查看cookie
print(browser.page_source) #查看源代码

browser.close() # 关闭浏览器

二,声明不同浏览器对象

from selenium import webdriver
browser = webdriver.Chrome()
browser = webdriver.Firefox()
browser = webdriver.PhantomJS()
browser = webdriver.Safari()

三,访问页面

from selenium import webdriver

# 声明Chrome浏览器对象
browser = webdriver.Chrome()

# 请求页面 
browser.get('https://www.taobao.com')

print(browser.page_source)  # 获取网页源代码

browser.close()  # 关闭当前页面

四,查找元素

查找方法

  • find_element_by_id 根据id属性来定位

  • find_element_by_name 根据name元素来定位

  • find_element_by_xpath 根据xpath语法来定位

  • find_element_by_tag_name 根据标签名来定位

  • find_element_by_class_name 根据class的名字来定位

  • find_element_by_css_selector 根据css选择器来定位

  • 以下两种方法都是用来的定位超链接的,也就是对应html页面中的a标签,括号里传入的值就是a标签中的超链接文字

  • 两者的区别在于一个是完整的超链接文字,一个是可以只写部分超链接文字

  • find_element_by_link_text 需要完整的超链接文字

  • find_element_by_partial_link_text 可以只写部分超链接文字

源码经过修改之后的写法
  • find_element(By.ID,“id”) 根据id属性来定位
  • find_element(By.NAME,“name”) 根据name元素来定位
  • find_element(By.XPATH,“xpath语法”) 根据xpath语法来定位
  • find_elemnt(By.TAG_NAME,“input”) 根据标签名来定位
  • find_element(By.CLASS_NAME,“classname”) 根据class的名字来定位
  • find_element(By.CSS_SELECTOR,“#id”) 根据css选择器来定位
  • find_element(By.LINK_TEXT,“text”) 根据文本属性

1,单个元素

from selenium import webdriver 
browser = webdriver.Chrome()
browser.get("http://www.baidu.com")

browser.find_element(By.LINK_TEXT,"新闻").click() # 通过.click()点击目标链接
from selenium import webdriver 
from selenium.webdriver.common.by import By  #选择器

browser = webdriver.Chrome()
browser.get('https://taobao.com')

#通过元素ID查找 
# by_id = browser.find_element(By.ID,'q')
# by_id.send_keys('美食')
# print(by_id)

# # 通过css选择器查找
# css_select = browser.find_element(By.CSS_SELECTOR,'#q')
# css_select.send_keys('美食')

# # 通过xpath查找  
# xpath = browser.find_element(By.XPATH,'//*[@id="q"]')
# xpath.send_keys('美食')

# browser.close()

2,多个元素

  • find_elements(By.ID,“id”) 根据id属性来定位
  • find_elements(By.NAME,“name”) 根据name元素来定位
  • find_elements(By.XPATH,“xpath语法”) 根据xpath语法来定位
  • find_elemnts(By.TAG_NAME,“input”) 根据标签名来定位
  • find_elements(By.CLASS_NAME,“classname”) 根据class的名字来定位
  • find_elements(By.CSS_SELECTOR,“#id”) 根据css选择器来定位
  • find_elements(By.LINK_TEXT,“text”) 根据文本属性
from selenium import webdriver
browser = webdriver.Chrome()
browser.get('https://www.taobao.com')

elements = browser.find_elements(By.CSS_SELECTOR,'.service-bd li')   
print(elements)  # 以列表形式返回
for i in elements:
    print(i)
Logo

一站式 AI 云服务平台

更多推荐