python3+selenium3.13的简单操作

By | June 27, 2020

1.浏览器
1.1 浏览器窗口大小位置

 driver.set_window_size(self, width, height, windowHandle) 将某个窗口设置为固定大小
 driver.set_window_position(self, x, y, windowHandle) 将某个窗口移动到指定的位置
 driver.set_window_rect(self, x, y, width, height, windowHandle) 将某个窗口设置为固定的大小移动到指定的位置
 driver.maximize_window() 窗口最大化
driver.minimize_window() 窗口最小化

from selenium import webdriver
driver = webdriver.Firefox()
driver.get("http://www.baidu.com")
driver.set_window_size(480, 800)
driver.set_window_rect(300, 300, 480, 800)
driver.set_window_position(300, 300)
driver.maximize_window()
driver.minimize_window()

1.2 控制浏览器的后退、前进
driver.back()
driver.forward()

from selenium import webdriver
import time
driver = webdriver.Firefox()
f_url = "https://www.baidu.com"
s_url = "https://news.baidu.com"
driver.get(f_url)
time.sleep(1)
driver.get(s_url)
time.sleep(1)
driver.back()
assert f_url in driver.current_url, "current url not first url"
print(driver.current_url)
time.sleep(1)
driver.forward()
assert s_url in driver.current_url, "current url not second url"
print(driver.current_url)
driver.close()

1.3 模拟浏览器刷新
driver.refresh()

2.元素操作

  clear  清除文本
  send_keys(value)  模拟按键输入
  click()  单击
  submit()  提交表单,如搜索框输入内容后的回车操作,就可以通过submit()方法模拟
  size  返回元素的尺寸
  text  获取元素的文本
  get_attribute(name)  获得属性值
  is_displayed()  返回该元素是否可见,布尔类型

from selenium import webdriver
import time
driver = webdriver.Firefox()
f_url = "https://www.baidu.com"
driver.get(f_url)
driver.find_element_by_id("kw").send_keys("hello")
print(driver.find_element_by_id("cp").text)
driver.find_element_by_id("kw").clear()
driver.find_element_by_id("kw").send_keys("selenium")
driver.find_element_by_id("kw").submit()
print(size)
print(driver.find_element_by_id("kw").get_attribute("name"))
print(driver.find_element_by_id("kw").is_displayed())
driver.close()

3.鼠标事件

  perform()  执行所有ActionChains中存储的行为
  context_click()  右击
  double_click()  双击
  drag_and_drop()  拖动
  move_to_element()  鼠标悬停

  右击没有实现

from selenium import webdriver
from selenium.webdriver.common.action_chains import  ActionChains
import time
driver = webdriver.Firefox()
f_url = "https://www.baidu.com"
driver.get(f_url)
driver.find_element_by_link_text("地图").click()
driver.find_element_by_xpath("//span[@class='success']").click()
nowPos = driver.find_element_by_xpath("//*[@class="normal"][1]")
ActionChains(driver).context_click(nowPos).perform()
time.sleep(1)
try:
    driver.find_element_by_xpath("//span[@id="cmitem_start"]").click()
except Exception as e:
    print("not found")

time.sleep(1)
driver.close()

  鼠标悬停

from selenium import webdriver
from selenium.webdriver.common.action_chains import  ActionChains
import time
driver = webdriver.Firefox()
f_url = "https://www.baidu.com"
driver.get(f_url)
bdMore = driver.find_element_by_link_text("设置")
ActionChains(driver).move_to_element(bdMore).perform()
driver.find_element_by_link_text("搜索历史").click()
time.sleep(2)
driver.close()

  鼠标双击
没有找到适用的场景,没有尝试

element = driver.find_element_by_link_text("xx")
ActionChains(driver).double_click(element).perform()

  鼠标拖放
没有找到适用的场景,没有尝试

e1 = driver.find_element_by_xpath("") #源位置
e2 = driver.find_element_by_xpath("") #目标位置
ActionChains(driver).drag_and_drop(e1, e2).perform()  #执行拖放

4.键盘事件

  sendkeys可以模拟键盘输入,也可以用来模拟键盘上的按键,甚至是组合键

from selenium import webdriver
from selenium.webdriver.common.by import By
from selenium.webdriver.common.keys import Keys
from selenium.webdriver.common.action_chains import  ActionChains
from time  import sleep,ctime
driver = webdriver.Firefox()
driver.get("https://www.baidu.com")
el = driver.find_element(By.ID, "kw")
el.send_keys("seleniumm")
el.send_keys(Keys.BACK_SPACE)
el.send_keys(Keys.SPACE)
el.send_keys("教程")
el.send_keys(Keys.CONTROL, 'a')
el.send_keys(Keys.CONTROL, 'x')
el.send_keys(Keys.CONTROL, 'v')
el.send_keys(Keys.ENTER)
driver.close()

send_keys(Keys.BACK_SPACE) 删除键BackSpace
send_keys(Keys.SPACE) 空格键Space
send_keys(Keys.TAB) 制表键Tab
send_keys(Keys.ESPACE) 回退键Esc
send_keys(Keys.ENTER) 回车键Enter
send_keys(Keys.CONTROL,’a’) 全选Ctrl+A
send_keys(Keys.CONTROL,’c’) 复制CTRL+C
send_keys(Keys.CONTROL,’x’) 剪切CTRL+X
send_keys(Keys.CONTROL,’v’) 粘贴Ctrl+V
send_keys(Keys.F1) 键盘F1
send_keys(Keys.F12) 键盘F12  

问题:如果遇到以下错误,是没有导入Keys导致的
from selenium.webdriver.common.keys import Keys

5.获得验证信息

  title  获取页面标题 
  current_url   当前的URL
  text   获取标签对之间的文本信息

driver = webdriver.Firefox()
driver.get("https://www.baidu.com")
print(driver.title)
print(driver.current_url)
driver.close()

6.设置等待

  6.1 显式等待

  显示等待使web driver等待某个条件成立时继续执行,否则跑出超时异常TimeoutException。WebDriverWait类是WebDriver提供的等待方法。在设置时间内,默认每隔一段时间检测一次当前页面元素是否存在,如果超过设置时间检测不到就抛出异常。

  WebDriverWait(driver, timeout, poll_frequency=0.5, ignored_exceptions=None)
  driver:浏览器驱动
  timeout:最长超时时间,默认以秒为单位
  poll_frequency:检测的间隔时间,默认0.5秒
  ignored_exceptions:超时后的异常信息,默认抛NoSuchElementException异常
  WebDriverWait一般由until()或until_not()方法配合使用
  until(method, message=”) 调用该方法提供的驱动程序作为一个参数,直到返回值为true
  until_not(method, message=”) 调用该方法提供的驱动程序作为一个参数,直到返回值为false

from selenium import webdriver
from selenium.webdriver.common.by import By
from time  import sleep,ctime
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC #将expected_condtions重命名为EC
driver = webdriver.Firefox()
driver.get("https://www.baidu.com")
el = WebDriverWait(driver, 5, 0.5).until(EC.presence_of_element_located((By.ID, "kw")))#将EC方法作为参数传入
el.send_keys('selenium')
driver.close()

expected_conditions类提供的预期条件判断方法:
title_is 判断当前页面的标题是否等于预期
title_contains 判断当前页面的标题是否包含预期字符串
presence_of_element_located 判断元素是否被加在DOM树里,并不代表该元素一定可见
visibility_of_element_located 判断元素可见(元素非隐藏,且元素宽和高都不等于0)
visibility_of 与上一个方法相同,只是上一个方法参数为定位;该方法接收的参数为定位后的元素
presenece_of_all_elements_located 判断是否至少有一个元素存在于DOM树中。例如,在百度首页有n个元素的class为mnav,那么只要有一个存在,就返回true
text_to_be_present_in_element 判断某个元素的text是否包含了预期的字符串
text_to_be_present_in_element_value 判断某个元素的value属性是否包含了预期的字符串
frame_to_be_available_and_switch_to_it 判断该表单是否可以切换进去,如果可以,返回true并且switch进去,否则返回false
invisibility_of_element_located 判断某个元素是否不存在与DOM树或不可见
invisibility_to_be_clickable 判断元素是否可见且可以点击
staleness_of 等到一个元素从DOM树中移除
element_to_be_selected 判断某个元素是否被选中,一般用在下拉列表
element_selection_state_to_be 判断某个元素的选中状态是否符合预期
element_located_selection_state_to_be 与上一个方法作用相同,只是上一个方法参数为定位后的元素,该方法接收的参数为定位
alert_is_present 判断页面上是否存在alert

  6.2 隐式等待

  隐式等待是通过一定的时长等待页面上某元素加载完成。如果超出了设置的时长元素还没有被加载,则抛出NoSuchElementException异常。Web Driver提供了implictly_wait()方法来实现隐式等待,默认设置为0.

implicitly_wait(seconds)

from selenium import webdriver
from time import ctime
driver = webdriver.Firefox()
driver.get("https://www.baidu.com")
driver.implicitly_wait(10) #设置隐式等待时间为10秒
try:
    print(ctime())
    driver.find_element_by_id("kw22").send_keys("selenium")
except Exception as e:
    print(e)
finally:
    print(ctime())
driver.close()

  6.3 休眠 time.sleep(seconds)

来源: https://www.cnblogs.com/csj2018/p/9249700.html

Leave a Reply