Selenium找元素的方法有id,classname,tag,xpath,选择器。其实使用哪个无所谓,只要你能熟练地找到元素就行了。
这里面还需要再说一个方法,那就是xpath。无论你是否用到Selenium,当你认真地学爬虫的话,xpath也是经常遇到的。
首先我们知道xpath是什么?它有什么用?XPath (XML Path Language) 是由国际标准化组织W3C指定的,用来在 XML 和 HTML 文档中选择节点的语言。目前主流浏览器 (chrome、firefox,edge,safari) 都支持XPath语法
绝对路径
绝对路径就是具有确定性的,从根节点开始写的路径。这里我们的根节点是/html,我们从/html开始写一直写到某个具体的元素。一般来说绝对路径都是比较长的。
例如我们可以这样子:
elements = driver.find_elements_by_xpath("/html/body/div/")
上面的xpath是连贯起来的,具体确定性,所以他是绝对路径。
再一次以百度为例
上面的完整xpath是:
/html/body/div[1]/div[1]/div[5]/div/div/form/span[2]/input
相对路径
与绝对路径相对的,我们还有相对路径。相对路径并不是从根节点开始写的。一般开头就是一个双斜杠//。
例如:
//div//a
有的同学说,相对路径这么短?对,它就这短,所以他很有可能会匹配到很多个,所以我们需要注意了。看匹配出来的元素是否就是我们需要的,不然用的时候有可能会报错。
我们完整的匹配代码就是:
elements = driver.find_elements_by_xpath("//div//p")
这样子就可以匹配到一堆符合条件的了。
通配符
这里的通配符就是任意字符的意思,用*代替。
如果要选择所有div节点的所有直接子节点,可以使用表达式 //div/*
elements = driver.find_elements_by_xpath("//div/*")
上面的代码就可以匹配到全部div下面的全部子节点。
关于爬虫和自动化测试,有兴趣学的话,可以关注公众号:诗一样的代码,留言给我,我教你系统地学。