Selenium模块

打开浏览器并搜寻指定url

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

chrome设置无头模式

from selenium.webdriver.chrome.options import Options

chrome_options = Options()
chrome_options.add_argument('--headless')
browser = webdriver.Chrome(options=chrome_options)
chrome设置无头模式

一 元素查找方法

elements为查找所有的定位标签,类型为列表,element是第一个定位标签

    browser.find_element_by_id()           通过元素id定位

    browser.find_element_by_class_name()     通过class属性的值去定位

    browser.find_element_by_name()        通过name属性去定位

    browser.find_elements_by_tag_name()       通过标签名去定位

    browser.find_element_by_link_text()         通过文本链接去定位  

    browser.find_element_by_partial_link_text()    通过部分链接来定位

    browser.find_element_by_xpath()        根据html路径来定位

1 from selenium import webdriver
2 import time
3 browser=webdriver.Chrome()
4 browser.get('https://www.baidu.com')
5 print(browser.find_element_by_xpath("//input[@id='kw']"))
6 time.sleep(1)
7 browser.close()
8 返回对象
9 <selenium.webdriver.remote.webelement.WebElement (session="15683e948eeffe5b3742e139bd0d35a4", element="50b28986-cf1c-427e-964c-13f97d5434c1")>
Xpath用法

    browser.find_elements_by_css_selector()     通过css来定位,该定位方法与css选择器用法一致

1 broswer.find_element_by_css_selector("#kw")
2 broswer.find_element_by_css_selector("[name=wd]")
3 broswer.find_element_by_css_selector(".s_ipt")
4 broswer.find_element_by_css_selector("html > body > form > span > input")
5 broswer.find_element_by_css_selector("span.soutu-btn> input#kw")
6 broswer.find_element_by_css_selector("form#form > span > input")
Css_selector用法

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

用法

说明

Set_window_size()

设置浏览器的大小

Back()

控制浏览器后退

Forward()

控制浏览器前进

Refresh()

刷新当前页面

Clear()

清除输入框内的文本

Send_keys(value)

模拟键盘输入

Click()

用于提交表单

Get_attribute()

获取元素属性值

Is_displayed()

设置该元素是否用户可见

Size()

返回元素的尺寸

Submit()

用于提交表单

Text()

获取元素的文本

from selenium import webdriver
import time
browser=webdriver.Chrome()
browser.set_window_size(200,200)
browser.get('https://www.baidu.com')
element=browser.find_element_by_xpath("//a[@id='setf']")
print(element.text)#获取标签的文本内容

print(element.get_attribute('href'))#获取某个属性的值
print(element.size)

element=browser.find_element_by_xpath("//input[@id='kw']")#找到input标签
element.send_keys('python')#在输入框内输入python
element.clear()#清除输入狂内容
submit.submit()#提交数据
submit.click()#点击提交按钮提交内瓤

time.sleep(1)
element.clear()#清除输入狂内容
time.sleep(1)
browser.get('https://www.taobao.com')
time.sleep(1)
browser.back()
time.sleep(1)

browser.forward()
time.sleep(1)
browser.close()
上述方法用法

 三:鼠标事件

方法

说明

ActionChains(driver)

构造ActionChains对象

context_click()

右击

move_to_element(above)

鼠标悬停

double_click()

双击

drag_and_drop()

拖动

perform()

执行所有 ActionChains 中存储的行为,可以理解成是对整个操作的提交动作

 

from selenium import webdriver
from selenium.webdriver.common.action_chains import ActionChains
import time

browser=webdriver.Chrome()
browser.get("https://www.baidu.com")

#定位要悬停的元素
element=browser.find_element_by_link_text("设置")
#对定位到的元素执行鼠标悬停操作
ActionChains(browser).move_to_element(element).perform()
move_to_element(element)
1 import time
2 browser=webdriver.Chrome()
3 browser.get("https://www.baidu.com")
4 #定位要悬停的元素
5 
6 element=browser.find_element_by_link_text("设置")
7 ActionChains(browser).context_click(element).perform()
8 
9 time.sleep(10)
context_click

 三:键盘事件

方法

说明

send_keys(Keys.BACK_SPACE)

删除键(BackSpace

send_keys(Keys.SPACE)

空格键(Space)

send_keys(Keys.TAB)

制表键(Tab)

send_keys(Keys.ESCAPE)

回退键(Esc

send_keys(Keys.ENTER)

回车键(Enter

from selenium import webdriver
from selenium.webdriver.common.action_chains import ActionChains
from selenium.webdriver.common.keys import Keys#导入keys模块
import time
browser=webdriver.Chrome()
browser.get("https://www.baidu.com")

#定位要悬停的元素
element=browser.find_element_by_xpath("//input[@id='kw']")
element.send_keys("python")
time.sleep(1)

element.send_keys(Keys.BACK_SPACE)#Backspace按键
element.send_keys(Keys.RETURN)#回车

time.sleep(10)
Keys模块使用

方法

说明

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…Fn)

键盘 F1…Fn


 四.获取断言信息

方法

说明

title

用于获得当前页面的标题

current_url

用户获得当前页面的URL

text

获取搜索条目的文本信息

from selenium import webdriver
from selenium.webdriver.common.action_chains import ActionChains
from selenium.webdriver.common.keys import Keys#导入keys模块
import time
browser=webdriver.Chrome()
browser.get('https://www.baidu.com')

print(browser.current_url)
print(browser.title)

 五.设置元素等待:

http://www.testclass.net/selenium_python/element-wait/

六:多表单切换

   在Web应用中经常会遇到frame/iframe表单嵌套页面的应用,WebDriver只能在一个页面上对元素识别与定位,对于frame/iframe表单内嵌页面上的元素无法直接定位。这时就需要通过switch_to.frame()方法将当前定位的主体切换为frame/iframe表单的内嵌页面中。

以126网站为例

from selenium import webdriver
from selenium.webdriver.common.action_chains import ActionChains
from selenium.webdriver.common.keys import Keys#导入keys模块
import time

#生成浏览器对象
driver=webdriver.Chrome()
driver.get("https://mail.126.com/")

#点击以用户名,密码登录
element=driver.find_element_by_partial_link_text("密码登录")
element.click()

#定位iframe,由于这里的iframe和id是动态的,所以只能这样去查找
t=driver.find_elements_by_tag_name('iframe')[0]#利用iframe标签去定位iframe
driver.switch_to_frame(t)#将定位的iframe对象作为参数,切换到这个iframe
username=driver.find_element_by_name('email')

username.clear()
username.send_keys(input("输入用户名"))

定位iframe的方法

  1.有id,并且唯一,直接写id
    driver.switch_to_frame("x-URS-iframe")
    driver.switch_to.frame("x-URS-iframe")

  2.有name,并且唯一,直接写name
    driver.switch_to_frame("xxxx")
    driver.switch_to.frame("xxxx")

  3.无id,无name,先定位iframe元素
    iframe = driver.find_elements_by_tag_name("iframe")[0]
    driver.switch_to_frame(iframe)
    driver.switch_to.frame(iframe)


 七:多窗口切换

  在页面操作过程中有时候点击某个链接会弹出新的窗口,这时就需要主机切换到新打开的窗口上进行操作。WebDriver提供了switch_to.window()方法,可以实现在不同的窗口之间切换

方法

说明

current_window_handle

获得当前窗口句柄

window_handles

返回所有窗口的句柄到当前会话

       switch_to.window()

 

用于切换到相应的窗口,与上一节的switch_to.frame()类似,前者用于不同窗口的切换,后者用于不同表单之间的切换

 js = 'window.open("https://www.sogou.com");'
browser.execute_script(js)
打开新的窗口

window

 八:警告框处理

  在WebDriver中处理JavaScript所生成的alert、confirm以及prompt十分简单,具体做法是使用 switch_to.alert 方法定位到 alert/confirm/prompt,然后使用text/accept/dismiss/ send_keys等方法进行操作。

方法

说明

Text

返回 alert/confirm/prompt 中的文字信息

accept()

接受现有警告框

dismiss()

解散现有警告框

send_keys(keysToSend)

发送文本至警告框。keysToSend:将文本发送至警告框。

 1 from selenium import webdriver
 2 from selenium.webdriver.common.action_chains import ActionChains
 3 from selenium.webdriver.common.keys import Keys#导入keys模块
 4 import time
 5 broswer=webdriver.Chrome()
 6 broswer.implicitly_wait(10)
 7 broswer.get("https://www.baidu.com")
 8 
 9 #鼠标悬停至"设置"链接
10 link=broswer.find_element_by_link_text("设置")
11 ActionChains(broswer).move_to_element(link).perform()
12 time.sleep(5)
13 #打开搜索设置
14 broswer.find_element_by_link_text("搜索设置").click()
15 
16 #在此处设置等待2s否则会报错
17 time.sleep(5)
18 
19 #保存设置
20 
21 broswer.find_element_by_class_name('prefpanelgo').click()
22 time.sleep(5)
23 
24 broswer.switch_to.alert.accept()#相当于确认了弹窗信息
25 broswer.switch_to.alert.dismiss()
26 print(broswer.switch_to.alert.text)#输出弹窗内容
演示

 九:下拉框选择操作

  导入选择下拉框Select类,使用该类处理下拉框操作

  from selenium.webdriver.support.select import Select

方法

说明

select_by_value(“选择值”)

相当于我们使用鼠标选择下拉框的值

 

from selenium import webdriver
from selenium.webdriver.support.select import Select
from selenium.webdriver.common.action_chains import ActionChains
from selenium.webdriver.common.keys import Keys#导入keys模块
import time
broswer=webdriver.Chrome()
broswer.implicitly_wait(10)
broswer.get("https://www.baidu.com")

#鼠标悬停至"设置”链接
broswer.find_element_by_link_text("设置").click()
time.sleep(2)

#打开搜索设置
broswer.find_element_by_link_text("搜索设置").click()
time.sleep(2)

#搜索结果显示条数
sel=broswer.find_element_by_xpath("//select[@id='nr']")#查找select标签
Select(sel).select_by_value('50')#设置select内的值为50
time.sleep(3)
演示

十:文件上传          

         对于通过input标签实现的上传功能,可以将其看作是一个输入框,即通过send_keys()指定本地文件路径的方式实现文件上传。                                                                                                                                                                                                                                  

 1 from selenium import webdriver
 2 from selenium.webdriver.support.select import Select
 3 from selenium.webdriver.common.action_chains import ActionChains
 4 from selenium.webdriver.common.keys import Keys#导入keys模块
 5 import time
 6 broswer=webdriver.Chrome()
 7 broswer.implicitly_wait(10)
 8 broswer.get("http://upload.fx678.com/")
 9 找到上传文件的Input标签
10 file=broswer.find_element_by_name('file')
11 #找到上传文件的按钮
12 submit=broswer.find_element_by_class_name("btn")
13 #使用sendkeys发送路径
14 file.send_keys(r"C:UsersLenovoDesktop资料一句话\xx.jpg")
15 submit.click()
文件上传

十一:Cookie操作

  有时候我们需要验证浏览器中cookie是否正确,因为基于真实cookie的测试是无法通过白盒和集成测试进行的。WebDriver提供了操作Cookie的相关方法,可以读取、添加和删除cookie信息。

方法

说明

Get_cookies()

获得所有的cookie信息

Get_cookie(name)

返回字典的key为“name”的cookie信息

add_cookie(cookie_dict)

添加cookie。“cookie_dict”指字典对象,必须有name 和value 值

delete_cookie(name,optionsString)

删除cookie信息。“name”是要删除的cookie的名称,“optionsString”是该cookie的选项,目前支持的选项包括“路径”,“域”

delete_all_cookies()

删除所有cookie信息

from selenium import webdriver
from selenium.webdriver.support.select import Select
from selenium.webdriver.common.action_chains import ActionChains
from selenium.webdriver.common.keys import Keys#导入keys模块
import time
browser=webdriver.Chrome()
browser.get("http://www.youdao.com")

#打印cookie信息
print("cookie:",browser.get_cookies())
#添加cookie信息
dict={'name':'alex','value':'yes'}
browser.add_cookie(dict)
print("addcookie:",browser.get_cookies())
#删除一个cookie
browser.delete_cookie('path')
print('delete cookie:',browser.get_cookies())
#删除所有cookie
browser.delete_all_cookies()
print("all cookies:",browser.get_cookies())
演示

十二:浏览器滚动条

  可以借助JavaScript来控制浏览器的滚动条。WebDriver提供了execute_script()方法来执行JavaScript代码。

# browser.get('https://www.autohome.com.cn/beijing/')
#browser.execute_script('window.scrollTo(0,document.body.scrollHeight)')#滚动到最下方
# time.sleep(2)
# element=browser.find_element_by_id('auto-header-citypop-tip-list')
#browser.execute_script('arguments[0].scrollIntoView();",element')
#browser.execute_script("window.scrollBy(80,-1100)")#相对当前位置移动,负数向上移
#browser.execute_script("window.scrollTo(50,2000)")#移动到窗口绝对位置坐标,x左右移,y上下移
#browser.execute_script("arguments[0].scrollIntoView(false)",element)#移动到元素element对象的低端与当前窗口的底部对齐
#browser.execute_script('window.scrollTo(0,0)')#移动到最顶端
#browser.execute_script('alert("To Bottom")')#弹出警告框
View Code

本文引用博客 https://blog.csdn.net/weixin_36279318/article/details/79475388

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

  

 

 

 

 

原文地址:https://www.cnblogs.com/Mr-l/p/11399071.html