我们现阶段学习的是web
from time import sleep
from selenium import webdriver
from selenium.webdriver.chrome.service import Service
# 其中添加的是浏览器的驱动器地址
executable_path = r'H:\pythonStudy\Driver\chromedriver.exe'
# 注意 python的形参最好指定一下形参的变量值, 就像以下的两个
service = Service(executable_path=executable_path)
driver = webdriver.Chrome(service=service)
# driver = webdriver.Chrome()
driver.get('https://wclspace.xyz')
sleep(3)
driver.quit()
元素定位时依赖于什么
元素定位方式总共有八种
from selenium.webdriver.chrome.service import Service
from selenium.webdriver.common.by import By
# 其中添加的是浏览器的驱动器地址
executable_path = r'H:\pythonStudy\Driver\chromedriver.exe'
# 注意 python的形参最好指定一下形参的变量值, 就像以下的两个
service = Service(executable_path=executable_path)
driver = webdriver.Chrome(service=service)
# driver = webdriver.Chrome()
driver.get('https://baidu.com')
driver.find_element(By.ID, 'kw').send_keys("wclas")
driver.find_element(By.CLASS_NAME, 'kw').send_keys("wclas")
sleep(3)
driver.quit()
输入框有个name属性:name="wd",这里可以通过它的name属性定位到这个元素,并且通过send_keys()传输字符给输入框。
输入框有个tag(标签)属性:input,这里可以通过它的标签属性定位到这个元素,并且通过send_keys()传输字符给输入框。但是标签往往不是惟一的,所有在实际应用中不常用。
html中的相关标签
- a
- input
- form
...
# 页面种如果存在多个相同的标签名 ,默认返回第一个
# driver.find_element(By.CLASS_NAME, "bg s_ipt_wr new-pmd quickdelete-wrap").send_keys("wclas")
定位超链接
只能定位a标签
精准匹配
driver.find_element(By.LINK_TEXT, "新闻").click()
sleep(3)
driver.quit()
如果链接的字符串太长的话,全部输入影响代码美观也容易出错,这时就可以采用 partial_link_text,模糊匹配、截取字符串的一部分定位到元素。如图2中,我们定位新闻可以如下写。
定位的内容可以模块部分值, 但是必须能代表唯一性
如果没有id、name、calss ,该如何定位 ?
如果通过name、class、tag_name 无法定位到唯一的元素该如何定位 ?
Xpath
?xpath
依赖于元素的路径
他是基于XML(标记语言)、Path的简称, 他是一种在xml文档中查找元素信息的语言。
HTML可以看作是XML的一种实现方式,所以Selenium可以在web中定位元素
一般情况下, 尽量使用相对路径而不是用绝对路径。
最好不使用指定标签名称,不使用* 代替,效率非常慢
/ 后面必须为元素的名称 或者 *
四种:
匹配输入账号(相对路径)
//input[@id='usernameA']
匹配输入账号(绝对路径)
/html/body/form/div/fieldset/p[1]/input
匹配输入账号(通过内置函数)
//*[contains(@type, 'password')] #匹配type
匹配输入密码
//input[@id='passwordA']
// 后面跟的是相对路径
/ 后面跟决定路径
路径表达式
xpath通配符
Xpath 表达式的通配符可以用来选取未知的节点元素,基本语法如下:
Xpath内建函数
Xpath 提供 100 多个内建函数,这些函数给我们提供了很多便利,比如实现文本匹配、模糊匹配、以及位置匹配等,下面介绍几个常用的内建函数。
css 作为一种标记语言, 焦点、数据的样式。控制元素的显示样式。‘
css定位就是通过css选择器工具进行定位
driver.find_element(By.CSS_SELECTOR, "css选择内容")
说明: 根据元素的id进行选择
格式: `#id`
例如: #user <选择id为user的元素>
说明: 根据元素的id进行选择
格式: `.id`
例如: .user <选择class为user的元素>
说明: 根据元素的标签名进行选择
格式: `element`
例如: input <选择所有input标签的元素>
说明: 根据元素的属性进行选择
语法: [属性名=属性值]
例如: [name='password']
语法:
1. p>input
2. p input
提示: > 和 空格的区别, 大于必须为子元素,空格则不需要
Xpath 和 css定位的比较
browser.get(url):打开指定的URL
browser.back():返回上一个页面
browser.forward():前进到下一个页面
browser.refresh():刷新当前页面
browser.quit():关闭浏览器窗口
browser.maximize_window():最大化浏览器窗口
browser.set_window_size(width, height):设置浏览器窗口大小
browser.switch_to.window(window_name):切换到指定窗口
browser.switch_to.frame(frame_reference):切换到指定的iframe窗口
browser.execute_script(script):在当前页面执行指定的JavaScript脚本
browser.save_screenshot(filename):将当前页面截图保存为指定的文件
driver = webdriver.Chrome(service=service)
# driver = webdriver.Chrome()
driver.maximize_window()
driver.get('https://baidu.com')
sleep(2)
# todo 在第一个窗口中打开第二个窗口
driver.execute_script("window.open('https://www.wclspace.xyz')")
sleep(2)
driver.execute_script("window.open('https://www.alibaba.com')")
sleep(2)
# todo 获取所有的窗口句柄
windows = driver.window_handles
driver.switch_to.window(windows[1]) # 从0开始
sleep(2)
driver.quit()