selenium常用API介绍
文本的清空与提交
br.find_element_by_id("xxx").clear()
br.find_element_by_id("xxx").submit()
退出游览器
br.close()
br.quit()
获取页面标题和当前页面源码
br.title
br.page_source
游览器窗口最大化
br.maximize_window()
刷新页面
br.refresh()
前进后退
br.back()
br.forward()
多窗口切换
1.通过循环切换
from selenium import webdriver
br = webdriver.Firefox()
br.get("https://www.baidu.com")
h = br.current_window_handle
for i in br.window_handles:
if h!= i:
br.switch_to.window(i)
...这里是切换窗口后在新窗口中做的操作
br.switch_to.window(h)
...
2.通过窗口句柄编号切换
from selenium import webdriver
br = webdriver.Firefox()
br.get("https://www.baidu.com")
h = br.window_handles[0]
new = br.window_handles[1]
br.switch_to.window(new)
...操作新窗口
br.switch_to.window(h)
...
操作frame/iframe框架里面的元素
br.switch_to.frame("if")
br.switch_to.frame("nf")
e=br.find_element_by_xpath("//*[@id='if']")
br.switch_to.frame(e)
切出frame/iframe框架
br.switch_to.default_content()
复选框操作
-
通过常用元素定位方式定位复选框元素,然后加click()操作
from selenium import webdriver
br = webdriver.Firefox()
br.find_element_by_id("xxx").click()
br.find_element_by_tag_name("input").click()
br.find_elements_by_tag_name("input")[0].click()
br.find_elements_by_tag_name("input").pop().click()
-
通过元素的type属性值判断是否为复选框
from selenium import webdriver
br = webdriver.Firefox()
es = br.find_elements_by_tag_name("input")
for i in es:
if i.get_attribute("type")=="checkbox":
i.click()
下拉框操作
使用Select类判断元素是否为下拉框,如果是,那么返回一个下拉框对象,如果不是,那么抛出异常
from selenium import webdriver
br = webdriver.Firefox()
s = Select(br.find_element_by_id("xxx"))
s.select_by_value("x")
s.select_by_visible_text("x")
s.select_by_index(0)
s.options
for i in s.options:
i.click()
js弹窗处理
br.switch_to_alert.accept()
br.switch_to_alert.dismiss()
br.switch_to_alert.text
js代码调用
js1 = "window.scrollTo(100,200);"
js2 = "window.open('https://www.baidu.com')"
br.excute_script(js1)
br.excute_script(js2)
鼠标事件
使用ActionChains类
from selenium import webdriver
from selenium.webdriver import ActionChains
br = webdriver.Firefox()
ActionChains(br).move_to_element(br.find_element_by_id("xxx")).perform()
ActionChains(br).double_click(br.find_element_by_id("xxx")).perform()
ActionChains(br).context_click(br.find_element_by_id("xxx")).perform()
键盘操作
e = br.find_element_by_id("input")
e.send_keys("xxx")
使用Keys类,发送组合键盘按键
from selenium.webdriver.common.keys import Keys
e = br.find_element_by_id("input")
e.send_keys(Keys.BACK_SPACE)
e.send_keys(Keys.CONTROL,'a')
e.send_keys(Keys.CONTROL,'c')
e.send_keys(Keys.CONTROL,'v')
e.send_keys(Keys.CONTROL,'x')
窗口截图
也就是网页截图
br.get_screenshot_as _file(r"D:\xxx\xxx\xxx.png")
验证码处理
from random import randint
n=randint(1000,9999)
print(n)
num=int(input("请输入验证码:"))
print(num)
if num==n:
print("认证成功")
elif num==1357:
print("认证成功")
else:
print("认证失败")
Selenium脚本中可能出现的3种等待方法
为什么需要设置元素等待?
在我们做网页元素定位的时候,有可能出现网页打开了但是元素还没加载好,这个时候就定位不到元素,就会报错。为了避免这种情况,我们需要添加等待。
等待的分类
强制等待
sleep():sleep()可用于避免因为元素未加载而定位失败的情况,但是,如果指定的时间过长,即使元素加载好了,还是会继续等待,这样会浪费很多时间。在脚本调试过程中,sleep()用得比较多。
eg:sleep(10) 强制休眠10秒钟
隐式等待
implicitly_wait():隐式等待只需要声明一次,一般在打开浏览器后进行声明,声明之后对整个浏览器对象的声明周期都有效,后面不用再重复声明。隐式等待存在一个问题,就是程序会一直等待整个页面加载完成才会执行下一步,有时候想要定位的元素早就加载完成了,但是因为别的元素还没有,仍得到页面全部完成才执行下一步。
eg:implicitly_wait(10) 最多等10秒,抛出找不到元素的异常
显式等待
WebDriverWait():相比于隐式等待,显式等待只针对指定的元素生效,不再是针对所有的页面元素。可以根据需要定位的元素来设置显式等待,无需等待页面完全加载,从而可以节省因加载无关紧要的页面元素而浪费的时间。
eg:WebDriverWait(br,10,0.5).until():最多等10秒,如果超过10秒,抛出超时异常
from selenium import webdriver
from selenium.webdriver.common.by import By
from selenium.webdriver.support import expected_conditions
from selenium.webdriver.support.wait import WebDriverWait
br = webdriver.Firefox()
br.get("https://www.baidu.com")
e = WebDriverWait(br,10,0.5).until(expected_conditions.presence_of_element_located((By.ID,'kw')))
e.send_keys('aaa')
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)