1、首先理解 webdriver,selenium 外围玩的就是他;
2、其次晓得根本的元素定位
b.find_element_by_id() 等函数
3、说白了就是要把握元素定位的办法,先手工在浏览器开发者模式下可能失常定位到元素
通过 XPATH:
xpath 中定位元素, 个别倡议相对路径:
// 的模式
* 代表所有
//*[@id=”] 如果两头须要另外一个配合则加一个 and
xpath 也有内置的办法 text()
Xpath 定位元素的几种形式
1)绝对路径定位
a = browser.find_element_by_xpath(‘/html/body/div/div[2]/div/div/div/from/span/input’)
绝对路径定位存在很大的问题就是如果页面元素一扭转元素的 xpath 也会随之扭转,很不稳固,不举荐应用
2)标签 + 属性定位——xpath = “// 标签名[@属性 =’ 属性值 ’]”
例如,百度首页的输入框的 xpath 就能够示意为 //[@id=”kw”],其中 示意所有的标签名
当繁多的属性无奈确定到一个元素时,能够应用组合属性的形式例如,百度首页的输入框能够示意为 //*[@id=”kw” and @name=”wd”]
当然,也能够应用其余的逻辑运算,比方 or、not
3)text()办法定位
百度首页的新闻超链接的 xpath 能够示意为 //*[text()=’ 新闻 ’]
4)contains()办法定位,也叫含糊定位
xpath = “// 标签名[contains(@属性, ‘ 属性值 ’)]” 例如,百度首页的新闻也能够写成 //a[contains(@name,’news’)]
5)starts-with,ends-with 办法定位
starts-with – 匹配以 xx 结尾的属性值;ends-with — 匹配以 xx 结尾的属性值 //*[starts-with(@value,’ 百度一 ’)]能够定位到百度一下按钮;然而 browser.find_element_by_xpath(“//a[ends-with(@name,’_trnews’)]”)定位不到新闻,那是因为 ends-with 是 Xpath2.0 的用法,然而浏览器个别通常只反对 Xpath1.0
6)如果一个元素无奈通过本身的属性定位到,那么能够先定位到他的上一级或者上 N 级,而后再一级一级地找到他
例如,定位到百度首页的输入框,能够示意成 //form[@id=’form’]/span[contains(@class,’s_ipt_wr’)]/input
4、在自动化中的外围就是判断页面的响应,也就是当一个元素或者控件进去后才进行下一步,及这个页面是否因为点击或者其余操作而呈现
WebDriverWait(dr, 10).until(lambda the_driver: the_driver.find_element_by_id(‘dropdown1’).is_displayed())
这个就是期待元素呈现,并判断是否展现;
coding:utf-8
from selenium import webdriver
#导入 By 类
from selenium.webdriver.common.by import By
#导入显示期待类
from selenium.webdriver.support.ui import WebDriverWait
# 导入冀望场景类
from selenium.webdriver.support import expected_conditions
driver = webdriver.Chrome()
alert_is_present():判断页面是否呈现 alert 框
result=WebDriverWait(driver,10).until(expected_conditions.alert_is_present())
print(result.text)
5、selenium 外面的坑,就是浏览器界面的坑,无非就是 iframe 的嵌套中,要来回切换跳转,切换到 iframe 中去搞,之后再切出来
switch_to_frame()
switch_to_window()
开释 iframe,从新回到主页面上
driver.switch_to.default_content()
6、selenium 中有些组件仍不能满足条件,或者对于某些元素的点击及定位都无奈获取,则能够去用应用 selenium 间接操作 JS 来封装办法去调用。
driver.execute_script(c)
c 外面能够写 js 的代码