from selenium.webdriver.common.by import BY
elem=driver.find_element(By.ID,"kw")
定位的元素例子:
<a id="kw">哈哈哈<a>
from selenium.webdriver.common.by import BY
elem=driver.find_element(By.NAME,"kw")
定位的元素例子:
<a name="kw">哈哈哈<a>
from selenium.webdriver.common.by import BY
elem=driver.find_element(By.LINK_TEXT,"新闻")
定位的元素例子:
<a herf="https://www.baidu.com">新闻<a>
from selenium.webdriver.common.by import BY
elem=driver.find_element(By.PARTIAL_LINK_TEXT,"新")
定位的元素例子:
根据部分文本来定位
<a herf="https://www.baidu.com">新闻<a>
绝对路径:/开头的是相对路径,从第一个标签开始逐步往下找元素叫绝对路径
例子:/html/body/div[2]/div[3]/div/div/ul[2]/li[8]/li/a/div/span
相对路径://开头的是绝对路径,从某个元素开始逐步往下找元素叫相对路径
相对路径+索引
相对路径+属性
相对路径+通配符
相对路径+部分属性定位
相对路径+文本定位
略
前提:需要定位的元素属性必须唯一。
向文本框发送内容
from selenium import webdriver
driver=webdriver.Chrome()
driver.get("https://www.baidu.com/")
elem=driver.find_element_by_id("kw")
elem.send_keys("Selenium")
获取标签之间文本值
from selenium import webdriver
driver=webdriver.Chrome()
driver.get("https://www.baidu.com/")
elem=driver.find_element_by_id("kw")
print(elem.text)
获取标签的属性值
from selenium import webdriver
driver=webdriver.Chrome()
driver.get("https://www.baidu.com/")
elem=driver.find_element_by_id("kw")
elem.get_attribute("value")
最大化窗口
from selenium import webdriver
driver=webdriver.Chrome()
driver.get("https://www.baidu.com/")
driver.maximize_window()
返回当前窗口句柄
from selenium import webdriver
driver=webdriver.Chrome()
driver.get("https://www.baidu.com/")
print(driver.current_window_handle)
返回当前窗口url
from selenium import webdriver
driver=webdriver.Chrome()
driver.get("https://www.baidu.com/")
print(driver.current_url)
判断元素是否被选择
from selenium import webdriver
driver=webdriver.Chrome()
driver.get("https://www.baidu.com/")
elem=driver.find_element_by_id("kw")
elem.is_selected()
判断元素是否可用
from selenium import webdriver
driver=webdriver.Chrome()
driver.get("https://www.baidu.com/")
elem=driver.find_element_by_id("kw")
elem.is_enable()
判断元素是否在页面中显示
from selenium import webdriver
driver=webdriver.Chrome()
driver.get("https://www.baidu.com/")
elem=driver.find_element_by_id("kw")
elem.is_displayed()
清除输入框值
from selenium import webdriver
driver=webdriver.Chrome()
driver.get("https://www.baidu.com/")
elem=driver.find_element_by_id("kw")
elem.send_keys("Selenium")
elem.clear()
关闭浏览器并杀掉chromedriver
from selenium import webdriver
driver=webdriver.Chrome()
driver.get("https://www.baidu.com/")
driver.quit()
获取页面title
from selenium import webdriver
driver=webdriver.Chrome()
driver.get("https://www.baidu.com/")
print(driver.title)
刷新页面
from selenium import webdriver
driver=webdriver.Chrome()
driver.get("https://www.baidu.com/")
driver.refresh()
退后操作
from selenium import webdriver
driver=webdriver.Chrome()
driver.get("https://www.baidu.com/")
driver.back()
Selenium中将键盘鼠标操作封装在Action Chains中。
示例:
from selenium import webdriver
from selenium.webdriver.common.action_chains import ActionChains
driver=webdriver.Chrome()
driver.get("https://www.baidu.com/")
elem=driver.find_element_by_id("kw")
ActionChains(driver).move_to_element(bg_config).perform()
from selenium import webdriver
from selenium.webdriver.common.action_chains import ActionChains
from selenium.webdriver.common.keys import Keys
driver=webdriver.Chrome()
driver.get("https://www.baidu.com/")
elem=driver.find_element_by_id("kw")
elem.send_keys(Keys.BACK_SPACE)
ActionChains(driver).move_to_element(bg_config).perform()
示例:
from selenium import webdriver
from selenium.webdriver.support.select import Select
driver=webdriver.Chrome()
driver.get("https://www.baidu.com/")
elem=driver.find_element_by_id("kw")
Select(elem).select_by_index(1)
select_by_index(n) 根据下标选择
select_by_value(value) 根据值选择
select_by_visible_text(text) 根据text内容做选择
options 获取下拉列表所有选项
first_selected_options 返回所有被选中的选项
first_selected_option 返回第一个被选中的选项
from selenium import webdriver
from selenium.webdriver.support.select import Select
driver=webdriver.Chrome()
driver.get("https://www.baidu.com/")
elem=driver.find_element_by_id("kw")
options=Select(elem).options
for elem in options:
print(elem.text)
js实现浏览器滚动条操作
from selenium import webdriver
from selenium.webdriver.support.select import Select
driver=webdriver.Chrome()
driver.get("https://www.baidu.com/")
js="window.scrollTo(100,300)"
driver.execute_script(js)
from selenium import webdriver
from selenium.webdriver.support.select import Select
driver=webdriver.Chrome()
driver.get("https://www.baidu.com/")
driver.switch_to.frame(driver.find_element_by_id("login_frame"))
from selenium import webdriver
from selenium.webdriver.support.select import Select
driver=webdriver.Chrome()
driver.get("https://www.baidu.com/")
driver.switch_to.frame(0)
driver.switch_to.default_content()
from selenium import webdriver
from selenium.webdriver.support.select import Select
driver=webdriver.Chrome()
driver.get("https://www.baidu.com/")
driver.add_cookie({"session":"12344322"})
屏幕截图
from selenium import webdriver
from selenium.webdriver.support.select import Select
driver=webdriver.Chrome()
driver.get("https://www.baidu.com/")
driver.save_screenshot("q.png")
元素截图
from selenium import webdriver
from selenium.webdriver.support.select import Select
from PIL import Image
driver=webdriver.Chrome()
driver.get("https://www.baidu.com/")
elem=driver.find_element_by_id("kw")
left=elem.locationp['x']
top=elem.locationp['y']
right=left+elem.size['width']
bottom=top+elem.size['height']
im=Image.open("test.png")
im=im.crop((left,top,right,bottom))
im.save('t.png')
from selenium import webdriver
from selenium.webdriver.support.select import Select
driver=webdriver.Chrome()
driver.get("https://www.baidu.com/")
# 获取所有窗口句柄
handles=driver.window_handles
# 切换到新窗口
driver.switch_to.window(handles[1])
在实际测试过程中,在操作某个元素之前都会有一个等待过程,有3种
显示等待是针对特定的元素设置等待事件,在设置的时间内,默认每隔一段时间(默认0.5s)检测一次当前页面元素,在规定的时间内找到元素,则执行下一步,超时没有找到则抛异常。
from selenium.webdriver.support import expected_conditions as EC
from selenium.webdriver.support.wait import WebDriverWait
#判断元素是否存在页面
presence_of_element_located(*locate):入参为一个元祖,需要传入元素类型和对应元素信息,底层自动调用
WebDriverWait(driver=driver,timeout=1).until(EC.presence_of_element_located((By.ID,"111")),message="test")
#判断元素不存在页面
WebDriverWait(driver=driver,timeout=1).until_not(EC.presence_of_element_located((By.ID,"111")),message="test")
#判断是否存在alert
WebDriverWait(driver=driver,timeout=1).until(EC.alert_is_present((By.ID,"alert")),message='None')
#判断标题是否等于预期值
WebDriverWait(driver=driver,timeout=1).until(EC.title_is(r"百度一下,你就知道"),message='None')
#判断标题是否包含预期值
WebDriverWait(driver=driver,timeout=1).until(EC.title_contains(r"百度一下,你就知道"),message='None')
#判断元素是否可见
WebDriverWait(driver=driver,timeout=1).until(EC.presence_of_all_elements_located((By.ID,"kw")),message='None')
#判断元素是否可点击
WebDriverWait(driver=driver,timeout=1).until(EC.element_to_be_clickable((By.ID,"kw")),message='None')
显示等待作用于整个driver,超过时间未加载完成就抛异常。
driver.implicitly_wait(5) ==单位s
调用time库中的sleep,让脚本强制停止到达设置时间后执行后面的脚本,极大影响脚本效率,不推荐使用。
time.sleep(5) ==单位s
cnblogs.com/llx2022/articles/16253259.html