一、设置公共方法
二、xpath轴定位
三、模仿鼠标事件
四、鼠标上下键盘
五、处理页面弹出框(打开本地文件)
六、切换窗口frame
七、radiobox = 单选框


一、设置公共方法
封装方法
image.jpeg

引用方法
image.jpeg


二、xpath轴定位 //div[@id=”u1”]//a[@name=”tj_login”] –父子层级
image.jpeg

//div[@id=”u1”]//child::a[2]
image.jpeg

文本定位://a[text()=”立即注册”]
三、模仿鼠标事件
先导入:from selenium.webdriver import ActionChains
单击右键:ActionChains(driver).context_click(loading).perform()


例:
loading_loc = ‘//div[@id=”u1”]//a[@name=”tj_login”]”]’
loading = driver.find_element(By.XPATH,loading_loc)
#点击右键
ActionChains(driver).context_click(loading).perform() #context:上下文
perform:执行

移动鼠标到某个位置:导入
ActionChains(driver).move_to_element(setting).perform()
例:###移动鼠标到设置
setting_loc = ‘//span[@id=”s-usersetting-top”]’
setting = driver.find_element(By.XPATH,setting_loc)
ActionChains(driver).move_to_element(setting).perform()
sleep(3)


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





四、鼠标上下键盘
导入这个包from selenium.webdriver.common.keys import Keys

例:ActionChains(driver).send_keys(‘凡’).key_down(Keys.LEFT).key_up(Keys.LEFT).send_keys(‘猫’).perform()
image.jpeg


image.jpeg

# key_down 按下 key_up 松开 (可以理解为按住往左移的键,然后松开达到左移目的)
# key_down(Keys.LEFT).key_up(Keys.LEFT) 括号里面的Keys:K是大写的,然后.LEFT方法,还有上、下等等

五、处理页面弹出框(当做自动化的时候页面出现弹出框,可以采取这个去除)
image.jpeg

image.jpeg


driver.switch_to.alert.accept() # 切入到alert然后确定 (等于确定键)
driver.switch_to.alert.dismiss() #切入到alert然后取消 (等于取消键)
driver.switch_to.alert.send_keys() #切入到alert,然后输入内容

image.jpeg

image.jpeg

image.jpeg


image.jpeg


你知道怎么切换么(网页就以下三种要切换)
Selenium里面有三种切换,告诉为什么要切换,怎么切换(说代码怎么写)
1、Widow,切换窗口,也就是句柄 (为什么要切换,然后不走),
拿到新窗口的id :在有些点击会弹出新的窗口,表面看是在新窗口,但实际还是在老的窗口,通过window_handles 拿到新的窗口进行切换,handles返回的是一个列表,通过window_handles拿到句柄,switch进行切换/
2、警告框alert :模态窗口。有时候打开新窗口,会弹出一个模态窗口,如果不解决他,是没有办法进行下面的操作的。可以通过alert切换进去,然后通过accept或者dismiss进行解决
3、Frame

六、切换窗口frame
先要切换到这个frame框架,才可以定位到这个框架里面的元素,进行自动化操作
image.jpeg

方法一:切换窗口把id写进去即可以切换到窗口,
image.jpeg

方法二:通方法过xpath切换
image.jpeg


*切换到小窗口之后,要在原框架(窗口)继续操作,要切换回原先框架
driver.switch_to.default_content()

切换回主frame


简历上写:善于编写高性能自动化测试脚本

七、radiobox = 单选框
image.jpeg


image.jpeg

第三个以及第6个不点
image.jpeg

image.jpeg
Web**⾃动化


安装配置
1. 安装 chromedriver https://npm.taobao.org/mirrors/chromedriver

选择和⾃⼰浏览器对应的版本
下载对应的版本,并将chromedriver 放到环境变量中。
2.安装 selenium
pip config set global.index-url https://pypi.tuna.tsinghua.edu.cn/
simple # 设置下载源为清华⼤学镜像
pip install selenium
快速开始
from selenium import webdriver
# 创建浏览器
driver = webdriver.Chrome()
# 打开⽹址
driver.get(“http://www.baidu.com“)
8种定位⽅式1.
id ⽅式
fifind_element_by_id
# 1 使⽤id ⽅式定位元素
driver.find_element_by_id(“kw”).send_keys(“凡猫”) # kw为 id属性值
2.
name ⽅式
# 2 使⽤ name ⽅式定位元素
driver.find_element_by_name(“wd”).send_keys(“helloworld”) #wd 为
name的属性值
3.
class name ⽅式
# 3.使⽤class name⽅式
driver.find_element_by_class_name(“s_ipt”).send_keys(“helloworld”)
# s_ipt 是class属性值
4 link_text ⽅式
# 4. link_text
driver.find_element_by_link_text(“新闻”).click() # 超链接的⽂本值
5 partial_link_text
# 5. partial_link_text
driver.find_element_by_partial_link_text(“新”).click()
css 定位def click_ele_by_text(text):
# 获取所有符合条件的元素
eles = driver.find_elements_by_css_selector(‘div[id=”u1”]>a’)
# 定义⼀个空的list
texts=[]
# print(eles,len(eles))
for ele in eles:
print(ele.text)
# 将元素⽂本值存到list中
texts.append(ele.text)
print(texts)
# 根据⽂本值找到 元素的索引值
ele_index= texts.index(text)
# 点击具体元素
eles[ele_index].click()
click_ele_by_text(“学术”)
练习
1. 登录
driver.get(‘http://47.100.225.199/admin.php?s=/admin/
logininfo.html’)
driver.find_element_by_name(‘username’).send_keys(“11111”)
driver.find_element_by_name(“login_pwd”).send_keys(“22222”)
# driver.find_element_by_class_name(“am-btn am-btn-primary am
radius btn-loading-example am-btn-sm am-btn-block”).click()
driver.find_element_by_tag_name(“button”).click()
jd 搜索商品 css 定位from selenium import webdriver
driver = webdriver.Chrome()
driver.get(‘https://www.jd.com‘)
driver.find_element_by_css_selector(‘input#key’).send_keys(“iphone
11”)
driver.find_element_by_css_selector(‘button[aria-label=”搜
索”]’).click()
first_price_css = ‘ul>li[class=”gl-item”]:first-child
div[class=”p-price”]’
first_iPhone_text =
driver.find_element_by_css_selector(first_price_css).text # 获取元
素⽂本
print(first_iPhone_text)
last_price_css = ‘ul>li[class=”gl-item”]:last-child div[class=”p
price”]’
last_iPhone_text =
driver.find_element_by_css_selector(last_price_css).text # 获取元素
⽂本
print(last_iPhone_text)
xpath 定位
from selenium import webdriver
import time
driver = webdriver.Chrome()
driver.get(‘https://www.jd.com‘)
driver.find_element_by_xpath(‘//
input[@id=”key”]’).send_keys(“iphone11”)
driver.find_element_by_xpath(‘//button[@aria-label=”搜
索”]’).click()
time.sleep(2)
# 价格 > 10000 商品prices_ele = driver.find_elements_by_xpath(‘//ul/li[@class=”gl
item”]//strong[@data-done=”1”][i>10000]’)
print(“——————“,len(prices_ele),”———————“)
for ele in prices_ele:
print(ele.text)
作业练习代码
“””
爬取百度贴吧,将抓取到的内容 存放到csv⽂件中
最终结果格式如下:
data.csv
标题,内容
回复:听说最近耽美⽂超⽕哦《匠⼼》,孙茂顿时急了
主要测试点:
1. 元素定位
2. 基础知识回顾 for while expect
3. csv⽂件处理
“””
from selenium import webdriver
from selenium.common.exceptions import NoSuchElementException
import time
driver = webdriver.Chrome()
driver.get(“https://tieba.baidu.com/index.html“)
driver.find_element_by_xpath(‘//input[@id=”wd1”]’).send_keys(“孙茂
书”)
driver.find_element_by_xpath(‘//a[text()=”全吧搜索”]’).click()
# 爬取title ⽂本
def crawl_title():
all_title_eles = driver.find_elements_by_xpath(‘//
span[@class=”p_title”]’)
for ele in all_title_eles:
print(ele.text)
# 爬取content ⽂本
def crawl_content():
all_content_eles = driver.find_elements_by_xpath(‘//
div[@class=”p_content”]’)
for ele in all_content_eles: print(ele.text)
while True:
try:
crawl_title()
crawl_content()
next_page_xpath = ‘//a[@class=”next”]’
next_page = driver.find_element_by_xpath(next_page_xpath)
next_page.click()
time.sleep(3)
except NoSuchElementException:
print(“已经加载到最后⼀⻚”)
driver.quit() #关闭浏览器
break
苏宁 搜索iPhone11
打印出
第⼀个和最后⼀个以及倒数第⼆个
⼿机价格
参考 css 定位 https://www.w3school.com.cn/cssref/css_selectors.asp