Python使用Selenium的webdriver

Selenium是一个用于测试网站的自动化测试工具,支持各种浏览器包括Chrome、Firefox、Safari等主流界面浏览器。

安装Selenium

pip install Selenium

使用firefox浏览器驱动加载网页

from selenium import webdriver
 
driver = webdriver.Firefox()
driver.get(r"http://www.baidu.com/")
driver.set_window_size(800,800)

input_first = driver.find_element(By.CLASS_NAME, 'content')
html = input_first.get_attribute('innerHTML')

driver.quit() # don't forget to quit the driver!

无界面模式加载网页

options = webdriver.FirefoxOptions()
options.add_argument("--headless") #设置火狐为headless无界面模式
options.add_argument("--disable-gpu")
driver = webdriver.Firefox(options=options)

常用方法

Selenium提供了8种定位方式:

定位一个元素 定位多个元素 含义
find_element_by_id find_elements_by_id 通过元素id定位
find_element_by_name find_elements_by_name 通过元素name定位
find_element_by_xpath find_elements_by_xpath 通过xpath表达式定位
find_element_by_link_text find_elements_by_link_text 通过完整超链接定位
find_element_by_partial_link_text find_elements_by_partial_link_text 通过部分链接定位
find_element_by_tag_name find_elements_by_tag_name 通过标签定位
find_element_by_class_name find_elements_by_class_name 通过类名进行定位
find_elements_by_css_selector find_elements_by_css_selector 通过css选择器进行定位

通过id定位:

driver.find_element_by_id("kw")

通过name定位:

driver.find_element_by_name("wd")

通过class name定位:

driver.find_element_by_class_name("s_ipt")

 通过tag name定位:

driver.find_element_by_tag_name("input")

通过xpath定位,几个常用写法:

dr.find_element_by_xpath("//*[@id='kw']")
dr.find_element_by_xpath("//*[@name='wd']")
dr.find_element_by_xpath("//input[@class='s_ipt']")
dr.find_element_by_xpath("/html/body/form/span/input")
dr.find_element_by_xpath("//span[@class='soutu-btn']/input")
dr.find_element_by_xpath("//form[@id='form']/span/input")
dr.find_element_by_xpath("//input[@id='kw' and @name='wd']")

通过css定位,几个常用写法:

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("新闻")

通过partial link text定位:

dr.find_element_by_partial_link_text("新")

控制浏览器操作的一些方法:

  • set_window_size()    设置浏览器的大小
  • back()    控制浏览器后退
  • forward()    控制浏览器前进
  • refresh()    刷新当前页面
  • clear()    清除文本
  • send_keys (value)    模拟按键输入
  • click()    单击元素
  • submit()    用于提交表单
  • get_attribute(name)    获取元素属性值
  • is_displayed()    设置该元素是否用户可见
  • size    返回元素的尺寸
  • text    获取元素的文本

size属性返回元素尺寸

size = driver.find_element_by_name("wd").size
print(size)      #size属性,返回元素的尺寸,表单输入框之类的width、height等

text属性返回元素文本

text = driver.find_element_by_id("demo").text
print(text)      #text属性,获取元素的文本,可以用力判断打开的页面是否是预期的。

get_attribute()方法获取属性值

attribute = driver.find_element_by_xpath(".//input[@id='kw']").get_attribute('maxlength')
print(attribute) #get_attribute()方法可以获取属性值

is_displayed()方法返回该元素是否设置可见

result = driver.find_element_by_partial_link_text("新闻").is_displayed()
print(result)   #is_displayed() 元素是否设置可见,可见返回true则false

刷新浏览器

driver.refresh()

设置浏览器的大小

driver.set_window_size(1400,800)

单击元素

element = driver.find_element_by_link_text("新闻")
element.click()

鼠标事件

在 WebDriver 中, 将这些关于鼠标操作的方法封装在 ActionChains 类提供。

  • ActionChains(driver)    构造ActionChains对象
  • context_click()    执行鼠标悬停操作
  • move_to_element(above)    右击
  • double_click()    双击
  • drag_and_drop()    拖动
  • move_to_element(above)    执行鼠标悬停操作
  • context_click()    用于模拟鼠标右键操作, 在调用时需要指定元素定位
  • perform()    执行所有 ActionChains 中存储的行为,可以理解成是对整个操作的提交动作


鼠标左键单击

#定位到需要左键单击的元素
left_click = driver.find_element(By.ID,'ID')
#使用perform()执行action
ActionChains(driver).click(left_click).perform()

鼠标右键操作

#定位到需要右击的元素
right_click = driver.find_element_by_link_text("jemeter")
#使用perform()执行action
ActionChains(driver).context_click(right_click).perform()

鼠标悬停

attrible = driver.find_element_by_link_text("设置")
ActionChains(driver).move_to_element(attrible).perform()

鼠标拖放操作

drag_and_drop(source,target) 在源元素上按住鼠标左键,然后移动到目标元素上释放。

  • source 鼠标拖动的源元素
  • target鼠标释放的目标元素
#定位元素的初始位置
source = driver.find_element_by_css_selector("")
#定位元素的要移动到的位置
target = driver.find_element_by_name("")
#执行元素的拖放操作
ActionChains(driver).drag_and_drop(source,target).perform()

你可能感兴趣的:(Python,Python)