Selenium自动化初学-第三节:WebDriver API

# 定位元素
# from selenium import webdriver
from selenium.webdriver.common.by import By
from selenium.webdriver.support.wait import WebDriverWait

# from time import sleep, time
#
# options = webdriver.ChromeOptions()
# options.add_experimental_option('detach', True)
# driver = webdriver.Chrome(options=options)
# driver.get("file:///Users/a58/Documents/HBuilderProjects/test.html")
# driver.find_element(By.CLASS_NAME,"m-search-btn").click()
# driver.find_element(By.ID,'mSearchInput').send_keys('python')
# driver.find_element(By.XPATH,'/html/body/div[2]/div/div[1]/div/div/div/div/div/div[2]/div/div[2]/div[1]/div[1]/div/div[2]/span[1]').click()
# sleep(1)
# windows = driver.window_handles
# driver.switch_to.window(windows[-1])
# print(driver.title)
# driver.find_element(By.PARTIAL_LINK_TEXT,'exe文件图标').click()
# sleep(1)
# windows2=driver.window_handles
# driver.switch_to.window(windows2[-1])
# print(driver.title)
# driver.find_element(By.CSS_SELECTOR,'#csdn-toolbar > div > div > div.toolbar-container-right > div > div.toolbar-btn.toolbar-btn-login.toolbar-btn-login-new.csdn-toolbar-fl > a').click()
# # driver.find_element(By.XPATH,'//li[@data-type="非常没帮助"]').click()
# # driver.find_element(By.XPATH,"//li[@id='is-like']").click()
# print("点击了")
# driver.find_element(By.ID,'id')
# driver.find_element(By.NAME,'name')
# driver.find_element(By.TAG_NAME,'input')
# driver.find_element(By.CLASS_NAME,'nameClass')
# driver.find_element(By.LINK_TEXT,'一个链接的文本')
# driver.find_element(By.PARTIAL_LINK_TEXT,'一个长链接')
# driver.find_element(By.XPATH,'/html/body/div[2]') #决定路径
# driver.find_element(By.XPATH,'//input[@id="kw"]') #是input标签且ID=kw,@id可换成任意属性
# driver.find_element(By.XPATH,'//*[@name="kw"]') #任意标签且name=kw
# driver.find_element(By.XPATH,'//span[@type="submit"]/input') #层级与属性结合
# driver.find_element(By.XPATH,'//span[@class="s" and @max length="100"]') #逻辑运算符
# driver.find_element(By.XPATH,'//span[contains(@class,"s")]/div') #包含
# driver.find_element(By.XPATH,'//span[text(),"haha"]')#文本信息
# driver.find_element(By.XPATH,'//span[contains(text(),"长长"]') #包含和文本信息组合使用
# ele1 = driver.find_elements(By.CSS_SELECTOR,'.bg3') #通过class
# driver.execute_script("arguments[0].style.backgroundColor ='blue'", ele1)
# ele2=driver.find_element(By.CSS_SELECTOR,'#su') #通过ID
# driver.execute_script("arguments[0].style.backgroundColor ='blue'", ele2)
# ele3=driver.find_element(By.CSS_SELECTOR,'input') #通过标签 只获取到符合要求的第一个元素
# driver.execute_script("arguments[0].style.backgroundColor='green'",ele3)
# ele4=driver.find_element(By.CSS_SELECTOR,'span input') #通过层级
# driver.execute_script("arguments[0].style.backgroundColor='yellow'",ele4)
# ele5=driver.find_element(By.CSS_SELECTOR,'span>input')
# driver.execute_script("arguments[0].style.backgroundColor='red'",ele5)
# ele6=driver.find_element(By.CSS_SELECTOR,'*')
# driver.execute_script("arguments[0].style.backgroundColor='red'",ele6)
# driver.find_element(By.CSS_SELECTOR,'[type="submit"]')#通过属性
# driver.find_elements(By.CSS_SELECTOR,'form.fm > span >input.bg4')#组合定位
# driver.find_elements(By.CSS_SELECTOR,'[class*="bg"]')#包含
# driver.find_elements(By.CSS_SELECTOR,'[class^="b"]')#以什么开头
# driver.find_elements(By.CSS_SELECTOR,'[class$="2"]')#以什么结尾
# text2=driver.find_element(By.CSS_SELECTOR, 'form > input:nth-child(2)').send_keys("hahahaa")#查找form标签下面第2个input标签元素
# question:当我的html文件没有<span>之间的全部内容时就可以获取正常上一行的元素,当我存在了<span>内容的时候就报错了,就获取不到上面那一行的元素。 答:这个第二个input标签是指form下的第二个子节点是input,而不是不管第几个子节点的遇到的第二个input
# question debug元素的时候我也不知道我定位的哪个元素 应该看什么呢?
# 控制浏览器
# driver= webdriver.Chrome(options=options)
# driver.get("https://www.baidu.com")
# driver.set_window_size(580,600)
# first_url="https://www.baidu.com"
# second_url="https://www.163.com/"
# print("now url is %r" %(first_url))
# driver.get(first_url)
# print("now url is %r" %(second_url))
# driver.get(second_url)
# print("back to %r" %(first_url))
# driver.back()
# print("forward to %r" %(second_url))
# driver.forward()
# driver.refresh()
# webdriver中常用方法
# driver=webdriver.Chrome(options=options)
# driver.get("https://www.baidu.com")
# driver.find_element(By.ID,'kw').send_keys("selenium")
# driver.find_element(By.ID,'su').click()
# driver.find_element(By.NAME,"wd").clear()
# searchTex=driver.find_element(By.ID,'kw')
# searchTex.send_keys("haha")
# searchTex.submit()
# print(searchTex.size)
# print(searchTex.get_attribute("maxlength"))
# tex=driver.find_element(By.CLASS_NAME,'voice-hover')
# tex2=driver.find_element(By.CLASS_NAME,'toindex')
# print("tex"+tex.text)#被隐藏的元素无法定位到,需要设置可见在获取元素
# print("tex2"+tex2.text)
# print(tex.is_displayed())
# driver.execute_script("arguments[0].style.display='block'",tex)
# print(tex.is_displayed())
# 鼠标操作
# from selenium.webdriver import ActionChains
# driver=webdriver.Chrome(options=options)
# driver.get("https://www.baidu.com")
# above=driver.find_element(By.ID,'s-usersetting-top')
# ActionChains(driver).move_to_element(above).perform()
# right=driver.find_element(By.LINK_TEXT,'图片')
# ActionChains(driver).context_click(right).perform()
# double=driver.find_element(By.LINK_TEXT,'贴吧')
# ActionChains(driver).double_click(double).perform()
#driver.get("http://www.runoob.com/try/try.php?filename=jqueryui-api-droppable")
# driver.get("file:///Users/a58/Documents/HBuilderProjects/drop.html")
# source = driver.find_element(By.ID,"draggable")
# source2 = driver.find_element(By.NAME,"s")
# source3 = driver.find_elements(By.XPATH,"//*[@type='button']")
# myIframe=driver.find_element(By.ID,"iframeResult") #因为是嵌套的iframe 需要定位iframe 然后切换frame
# driver.switch_to.frame(myIframe)
# source = driver.find_element(By.CSS_SELECTOR,"#draggable")
# target = driver.find_element(By.ID,"droppable")
# ActionChains(driver).drag_and_drop(source,target).perform()
# 键盘操作
# from selenium.webdriver.common.keys import Keys
# driver.get("https://www.baidu.com")
# driver.find_element(By.ID,'kw').send_keys("selenium")
# driver.find_element(By.ID,'kw').send_keys(Keys.BACK_SPACE)
# driver.find_element(By.ID,'kw').send_keys(Keys.SPACE)
# driver.find_element(By.ID,'kw').send_keys("教程")
# driver.find_element(By.ID,'kw').send_keys(Keys.CONTROL,'a')
# driver.find_element(By.ID,'kw').send_keys(Keys.CONTROL,'x')
# driver.find_element(By.ID,'kw').send_keys(Keys.CONTROL,'v')
# driver.find_element(By.ID,'su').send_keys(Keys.ENTER)
# driver.find_element(By.ID,'su').send_keys(Keys.TAB)
# driver.find_element(By.ID,'su').send_keys(Keys.ESCAPE)
# driver.find_element(By.ID,'su').send_keys(Keys.F1)
# 获得验证信息
# driver.get("https://www.baidu.com")
# print("title:" + driver.title)
# print("current_url:" + driver.current_url)
# content = driver.find_element(By.LINK_TEXT, '网盘')
# print("text:" + content.text)
# 设置元素等待
#显式等待
from selenium.webdriver.support import expected_conditions as EC
# driver.get("https://www.baidu.com")
# print("driver.title"+driver.title)
# element=WebDriverWait(driver,1,0.5).until(EC.title_is('百度一下,你就知道'))
# element1=WebDriverWait(driver,1,0.5).until_not(EC.title_contains('haha'))
# if element1:
# print('ok')
# else:
# print('no')
# element2=WebDriverWait(driver,1,0.5).until(EC.presence_of_element_located((By.ID,'kw')))
# if element2:
# print('ok')
# else:
# print('no')
# element3=WebDriverWait(driver,1,0.5).until(EC.visibility_of_element_located((By.ID,'kw')),message="没找到元素")#直到找到该元素
# if element3:
# print('ok')
# else:
# print('no')
# element=WebDriverWait(driver,1,0.5).until_not(EC.visibility_of_element_located((By.ID,'kww')),message="没找到元素")#直到没找到该元素
# element.send_keys('selenium')
# element_tem=driver.find_elements(By.ID,'s-top-left')[0]
# element4=WebDriverWait(driver,1,0.5).until(EC.visibility_of(element_tem))
# if element4:
# print('ok')
# else:
# print('no')
# element=WebDriverWait(driver,1,0.5).until(EC.presence_of_all_elements_located((By.ID,'kw')))
# if element:
# print('ok')
# else:
# print('no')
# element1=WebDriverWait(driver,1,0.5).until(EC.text_to_be_present_in_element((By.XPATH,'//a[@href="//home.baidu.com"]'),'百度'))
# if element1:
# print('ok')
# else:
# print('no')
# search=driver.find_element(By.ID,'kw')
# search.send_keys('Selenium')
# search.submit()
# element1=WebDriverWait(driver,1,0.5).until(EC.text_to_be_present_in_element_value((By.ID,'su'),'百度'))
# if element1:
# print('ok')
# else:
# print('no')
# element1=WebDriverWait(driver,1,0.5).until(EC.text_to_be_present_in_element_attribute((By.ID,'kw'),'class','s_ipt'),'错误')
# if element1:
# print('ok')
# else:
# print('no')
# print("element1")
# element1=WebDriverWait(driver,1,0.5).until_not(EC.alert_is_present())
# if element1:
# print('ok')
# else:
# print('no')
# print("element2")
# element2=WebDriverWait(driver,1,0.5).until(EC.url_contains('http'))
# if element2:
# print('ok')
# else:
# print('no')
# print("element3")
# pattern=r'.*?baidu.*?'
# element3=WebDriverWait(driver,1,0.5).until(EC.url_matches(pattern))
# if element3:
# print('ok')
# else:
# print('no')
# print("element4")
# element4=WebDriverWait(driver,1,0.5).until(EC.url_to_be('https://www.baidu.com/'))
# if element4:
# print('ok')
# else:
# print('no')
# print("element5")
# element5=WebDriverWait(driver,1,0.5).until(EC.element_to_be_clickable((By.ID,'su')))
# if element5:
# print('ok')
# else:
# print('no')
# print("start"+ctime())
# for i in range(2):
# try:
# el=driver.find_element(By.ID,'kkw')
# if el.is_displayed():
# break
# else:
# print("if的else") #if的else
# except:#有这个try...except就算报错了已不是会造成中断的异常
# pass
# sleep(1)
# else:
# print("time out")#for的else:只有在循环中没有中断时,才会执行else块【中断:跳出循环,return,异常】
# print("end"+ctime())#一定执行
#隐式等待
# driver.implicitly_wait(5)
# driver.get("https://www.baidu.com")
# try:
# print(ctime())
# driver.find_element(By.ID,'kw').send_keys('selenium')
# except Exception as e:
# print(e)
# finally:
# print(ctime())
#定位一组元素
# driver.get("file:///Users/a58/Documents/HBuilderProjects/test.html")
# elements = driver.find_elements(By.CSS_SELECTOR,'.bg3') #通过class
# for element in elements:
# print(element.text)
#cookie
# lists1=driver.get_cookies()
# for list in lists1:
# print("%s->%s"%(list['name'],list['value']))
# driver.add_cookie({'name':'user','value':'zoey'}) #{'domain': 'www.baidu.com', 'httpOnly': False, 'name': 'user', 'path': '/', 'sameSite': 'Lax', 'secure': True, 'value': 'zoey'}
# lists2=driver.get_cookies()
# for list in lists2:
# print(list)
# print(driver.get_cookie('user'))#返回指定name名称的Cookie信息
# lists3=driver.delete_cookie('user')
# driver.delete_all_cookies()
#弹窗交互
#涉及到弹窗包括1、 alert(一个按钮)2、 confirm(两个确认,取消)3、 prompt(两个按钮+输入框)
# driver.get('https://element.eleme.io/#/zh-CN')
# element=WebDriverWait(driver,3,0.2).until_not(EC.alert_is_present())
# if element:
# driver.switch_to.alert.accept()
# else:
# print("no")
# driver.get('file:///Users/a58/Documents/HBuilderProjects/test.html')
# driver.switch_to.alert.accept()
# driver.switch_to.alert.dismiss()
# 注意,这里输入的文本不会体现在提示框中
# 当你点击确定后才会有反应
# driver.switch_to.alert.send_keys('123')
# driver.switch_to.alert.accept()
#下拉框
# driver.get('file:///Users/a58/Documents/HBuilderProjects/test.html')
# sel=driver.find_element(By.XPATH,'//select[@id="nr"]')
# # Select(sel).select_by_value('20')
# # Select(sel).select_by_visible_text('每页30')
# Select(sel).select_by_index(0)
#上传文件
# file_path=os.path.abspath('./files/')
# print("--file_path--",file_path)#/Users/a58/PycharmProjects/pythonProject/studyPython/sample/files
# uploadPage='file://'+file_path+'/upandload.html'
# print("--uploadPage--",uploadPage)
# driver.get(uploadPage)
# driver.find_element(By.ID,'inputfile').send_keys(file_path+'/test.txt')
#下载文件
# fp=webdriver.FirefoxProfile()
# fp.set_preference("browser.download.folderList",2) #2设置下载到的文件夹路径 0浏览器的默认路径
# fp.set_preference("browser.download.dir",os.getcwd()) #getcwd获取当前文件所在的位置
# fp.set_preference("browser.helperApps.neverAsk.saveToDisk","binary/octet-stream") #指定下载文件的类型
# driver=webdriver.Firefox(firefox_profile=fp)
# driver.get("https://pypi.org/project/selenium/#files")
# driver.find_element(By.PARTIAL_LINK_TEXT,'selenium-4.10.0.tar.gz').click()
#调用js
# driver.set_window_size(800,600)
# driver.find_element(By.ID,'kw').send_keys('Selenium')
# driver.find_element(By.ID,'su').click()
# sleep(10)
# js = 'window.scrollTo(400,300);'
# driver.execute_script(js)
#question 切换页面,没有切换窗口,debug模式可以JS生效,普通模式不行;直接输入click后的URL,普通模式也行
#答:新开页才会记录到句柄数组,从原页面跳转至新页面不会记录到数组内,所以使用强制等待就可以实现普通模式也可完成JS操作
# text="kkkk"
# js="document.getElementById('id').value='"+text+"'"
# driver.execute_script(js)
# driver.get('http://videojs.com/')
# video = driver.find_element(By.ID,"preview-player_html5_api")
# # 谷歌18年6月起对autoplay功能做了限制,谷歌限制自动播放必须有交互行为:例如点击事件,其余浏览器也会,方法不同但是也需要设置
# element =driver.find_element(By.XPATH,'//*[@id="gatsby-focus-wrapper"]/header/div/div[1]/a')
# element.click()
# # 返回播放文件地址
# url = driver.execute_script("return arguments[0].currentSrc;", video)
# print(url)
# js2="return arguments"
# element2=driver.execute_script(js2,video)
# print("element2:",element2)
# driver.execute_script("return arguments[0].scrollIntoView();", video)
# print("播放视频start")
# driver.execute_script("arguments[0].play()",video)
# sleep(10)
# print("暂停视频start")
# driver.execute_script("arguments[0].pause()",video)
# sleep(5)
# print("控制视频的加载start")
# driver.execute_script("arguments[0].load()",video)
#滑动解锁
# driver.get('file:///Users/a58/Documents/HBuilderProjects/upandload.html')
# slider=driver.find_element(By.CLASS_NAME,'inner')
# source_slider=driver.find_element(By.ID,'hua')
# action=ActionChains(driver)
# source1=source_slider.size['width']
# source2=slider.size['width']
# target=source1-source2
# print("target:",target)
# action.click_and_hold(slider).perform()
# action.move_by_offset(target,0).perform()
# ActionChains(driver).release(slider).perform()#松开鼠标左键
# tips=driver.find_element(By.ID,'hua')
# success_text=tips.text#打印警告框提示语
# print("success_text:",success_text)
# sleep(2)
# action.reset_actions()#重置action:即清除存储在远端的动作
# driver.get("https://layui.dev/docs/2.8/laydate/#demo-type")
# date=driver.find_element(By.ID,'ID-laydate-type-time')
# ActionChains(driver).click_and_hold(date).perform()
# ActionChains(driver).release(date).perform()
# date2=driver.find_element(By.CSS_SELECTOR,'.layui-laydate-list.laydate-time-list')
# hour=date2[0]
# minute=date2[1]
# secend=date2[2]
# action=TouchActions(driver)#TouchActions selenium 3才有 4没有
# action.scroll_from_element(hour,0,5).perform()
# action.scroll_from_element(minute,0,5).perform()
# action.scroll_from_element(secend,0,5).perform()
#窗口截图
#driver.save_screenshot("/Users/a58/Desktop/selenium.png")
#question:如何点击查看driver有什么可以使用的方法
#关闭窗口
#driver.quit()

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值