python Selenium

2021-03-30 09:26

阅读:627

标签:方式   chain   forward   就是   一个   type   cli   exp   实现   

Selenium WebDriver

一、浏览器操作方法

from selenium import webdriver
driver = webdriver.Firefox("驱动路径")
driver.get("http://www.XX.com")
?
driver.maximize_window()              #最大化
driver.set_window_size(100,100)       #设置浏览器大小
driver.set_window_position(300,200)   #设置浏览器位置
driver.back()                         #后退
driver.forward()                      #前进
driver.refresh()                      #刷新
driver.close()                        #关闭当前窗口
driver.quit()                         #关闭所有WebDriver启动的窗口
driver.title                #获取页面title
driver.current_url          #获取当前页面url
driver.get_screenshot_as_file(1.jpg)  #截屏

二、选择器

from selenium import webdriver
driver = webdriver.Firefox("驱动路径")
driver.get("http://www.XX.com")
?
driver.find_element_by_id("name")                   #id定位
driver.find_element_by_name("PeriodName")           #name定位
driver.find_element_by_class_name("u-btn-levred")   #class定位
driver.find_element_by_tag_name("input")            #tag定位(标签)
driver.find_element_by_link_name("text")            #link定位(专门用来定位文本链接)
driver.find_element_by_partial_link_text("text")    #是对link定位的一种补充(可选区部分连接文本#唯一)
driver.find_element_by_xpath("//*[@id="kw"]")       #xpath定位(支持相对路径,绝对路径)
driver.find_element_by_css_selector("input")        #css定位(标签选择器"input"id选择器"#id_name"类class选择器".class_name"属性选择器"[type=submit]")层级选择器(可以多条件定位 空格隔开)

#如果选择出来多个使用find_elements 选择所有,然后用下标定位,列如 .find_element_by_link_name("text")[0]

#xpath与css定位功能都很强大,速度上css更快(但是对我来说速度啥的没啥用)

拓展(By定位元素)

除find_element_by_***这种方式,还有另一套写法,也就是统一调用find_element()方法,两个参数,第一个参数是定位的类型,由By提

供;第二个参数是定位的具体值

from selenium import webdriver
from selenium.webdriver.common.by import By     #使用By这种定位前要将By类导入
?
driver = webdriver.Firefox("驱动路径")
driver.get("http://www.XX.com")
?
driver.find_element(By.ID,"loginName")
driver.find_element(By.NAME,"SubjectName")
driver.find_element(By.CLASS_NAME,"u-btn-levred")
driver.find_element(By.TAG_NAME,"input")
driver.find_element(By.LINK_TEXT,"退出")
driver.find_element(By.PARTIAL_LINK_TEXT,"退")
driver.find_element(By.XPATH,".//*[@id=‘Title")
driver.find_element(By.CSS_SELECTOR,"[type=submit]")

#推荐使用第一种

三、元素操作方法

from selenium import webdriver
driver = webdriver.Firefox("驱动路径")
driver.get("http://www.XX.com")
?
element = driver.find_element_by_id("name")
element.click()
?
element.click()          #点击元素
element.send_keys()      #输入
element.clear()          #清除文本
element.size                 #返回元素大小
element.text                 #获取元素的文本
element.get_attribute("id")  #获取属性值
element.is_display()         #判断元素是否可见
element.is_enable()          #判断元素是否可用

四、鼠标操作

from selenium import webdriver
from selenium.webdriver.common.action_chains import ActionChains
?
driver = webdriver.Firefox("驱动路径")
driver.get("http://www.XX.com")
mouse = ActionChains(driver)
?
element = driver.find_element_by_id("name")
mouse.click(element).perform()    #.perform()执行
?
?
mouse.click(on_element=None)                   #单击鼠标左键
mouse.click_and_hold(on_element=None)           #点击鼠标左键,按住不放
mouse.context_click(on_element=None)              #点击鼠标右键
mouse.double_click(on_element=None)               #双击鼠标左键
mouse.drag_and_drop(source, target)               #拖拽到某个元素然后松开
mouse.drag_and_drop_by_offset(source, xoffset, yoffset)          #拖拽到某个坐标然后松开
mouse.move_by_offset(xoffset, yoffset)            #鼠标移动到距离当前位置(x,y)
mouse.move_to_element(to_element)                 #鼠标移动到某个元素
mouse.move_to_element_with_offset(to_element, xoffset, yoffset) #将鼠标移动到距某个元素多少距离的位置
mouse.release(on_element=None)                    #在某个元素位置松开鼠标左键
.perform()                                        #执行链中的所有动作
?

五、键盘操作

from selenium import webdriver
from selenium.webdriver.common.keys import Keys
?
driver = webdriver.Firefox("驱动路径")
driver.get("http://www.XX.com")
?
element = driver.find_element_by_id("name")
element.send_keys()
?
element.send_keys(Keys.BACK_SPACE)  #删除键(BackSpace)
element.send_keys(Keys.SPACE)       #空格键(Space)
element.send_keys(Keys.TAB)         #制表键(Tab)
element.send_keys(Keys.ESCAPE)      #回退键(Esc)
element.send_keys(Keys.ENTER)       #回车键(Enter)
element.send_keys(Keys.CONTROL,‘a‘) #全选(Ctrl+A)
element.send_keys(Keys.CONTROL,‘c‘) #复制(Ctrl+C)
element.send_keys(Keys.CONTROL,‘x‘) #剪切(Ctrl+X)
element.send_keys(Keys.CONTROL,‘v‘) #粘贴(Ctrl+V)
element.send_keys(Keys.F1)          #键盘F1

#主要为了实现输入特殊按键,和组合键

六、元素等待

sleep 强制等待

from time import sleep
?
sleep(2)    #设置等待2秒钟

implicitly_wait() 隐性等待

from selenium import webdriver
?
driver = webdriver.Chrome()
driver.implicitly_wait(20) #设置等待20秒钟,全局生效
driver.get(‘http://www.XX.com‘)

WebDriverWait()显示等待

from selenium import webdriver
from selenium.webdriver.support import expected_conditions as EC
from selenium.webdriver.support.ui import WebDriverWait    #WebDriverWait注意大小写
from selenium.webdriver.common.by import By
?
driver = webdriver.Chrome()
driver.get(‘http://www.XX.com‘)
?
element = WebDriverWait(driver,10).until(EC.presence_of_element_located((By.ID,‘kw‘)))
element.send_keys(‘123‘)

七、下拉框

通过select 进行定位下拉框

from selenium import webdriver
from selenium.webdriver.support.ui import Select
?
driver = webdriver.Chrome()
driver.get(‘http://www.XX.com‘)
element = driver.find_element_by_id("wb") #定位select标签
select = Select(element)   #实列化
?
select.select_by_index(1).click()  #通过index进行选择
select.select_by_value(1).click()  #通过value进行选择
select.select_by_visile_text("1").click()  #通过选项文字进行选择

多级定位

element=driver.find_element_by_id("wb")
element.find_element_by_xpath("//option[@value=‘0‘]").click()

css直接定位

driver.find_element_by_css_selector("#id > option:nth-child(1)").click() #直接定位

八、弹窗

from selenium import webdriver
?
driver = webdriver.Chrome()
driver.get(‘http://www.XX.com‘)
driver.find_element_by_xpath("//input[@onclick=‘showAlert()‘]").click() #点击元素弹窗
alert_window = driver.switch_to.alert #切换到弹窗
?
alert_window.text             #获取对话窗文本值
alert_window.accept()         #接受弹窗
alert_window.dismiss()        #取消弹窗
alert_window.send_keys()      #输入值(alert和confirm没有输入对话框,所以就不用能用了,只能使用在prompt里)

九、frame

from selenium import webdriver
?
driver = webdriver.Chrome()
driver.get(‘http://www.XX.com‘)
?
element = driver.find_element_by_id("name")  #获取frame元素
?
driver.switch_to.frame(element)              #切换frame
driver.switch_to.parent_frame()              #返回到父级
driver.switch_to.default_content()           #返回最外层

十、窗口

from selenium import webdriver
?
driver = webdriver.Chrome()
driver.get(‘http://www.XX.com‘)
#获取窗口句柄
current_handle = driver.current_window_handle
all_handle = driver.window_handles
#切换窗口
driver.switch_to.window(all_handles[-1])
driver.switch_to.window(current_handle)

十一、cookie

from selenium import webdriver
?
driver = webdriver.Chrome()
driver.get(‘http://www.XX.com‘)
?
driver.get_cookie(name)        #返回单个名为name的cookie信息,如果没有找到,返回none
driver.get_cookies()           #返回当前会话所有的cookie信息
driver.add_cookie(cookie_dict) #在当前会话中添加cookie信息
driver.delete_cookie(name)     #删除单个名为name的cookie信息
driver.delete_all_cookies()    #在当前会话中删除所有cookie信息

十二、JS

driver.execute_async_script(script, args)  #异步执行JS代码,script:被执行的JS代码,args:js代码中的任意参数
driver.execute_script(script, args)  #同步执行JS代码,script:被执行的JS代码,args:js代码中的任意参数
?
#举例:使用js拖动混动条
js = "window.scrollTo(0,10000)"      #(0,100)滚动条位置
driver.execute_script(js)



python Selenium

标签:方式   chain   forward   就是   一个   type   cli   exp   实现   

原文地址:https://www.cnblogs.com/lazy-sang/p/13584721.html


评论


亲,登录后才可以留言!