头图

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()

image.png

释放iframe,重新回到主页面上

driver.switch_to.default_content()

6、selenium中有些组件仍不能满足条件,或者对于某些元素的点击及定位都无法获取,则可以去用使用selenium直接操作JS来封装方法去调用。

driver.execute_script(c)

c里面可以写js的代码


凡二先生
1 声望2 粉丝

谷隐.凡二