Python Selenium定位html元素|find_element_by_class-name-id-tag-css-xpath-text

421 阅读3分钟
原文链接: www.pythonf.cn

Selenium官方给了八种定位方法


1.find_element_by_class_name通过class name定位元素

我们拿Pythonfree网站来举例,点击右上角的搜索框。

Snipaste_2019-12-12_17-02-46.png

鼠标右击搜索图标,然后选择检查

Snipaste_2019-12-12_20-07-41.png

可以看到搜索标签的class name是btn btn-default

Snipaste_2019-12-12_20-08-35.png


所以find_element_by_class_name方法里的参数就填btn :

#coding=utf-8
from selenium import webdriver
import time

driver = webdriver.Chrome(executable_path="D:/chromedriver/chromedriver.exe")
driver.get('https://www.pythonf.cn')
time.sleep(5)

driver.find_element_by_class_name('btn').click()

2.find_element_by_id通过id定位元素

接着上面的例子,我们要在输入框中输入Pycharm几个字,继续鼠标右击输入框,选择检查,看到input标签的id是key

Snipaste_2019-12-12_20-11-11.png

所以find_element_by_id方法里填入key:

#coding=utf-8
from selenium import webdriver
import time

driver = webdriver.Chrome(executable_path="D:/chromedriver/chromedriver.exe")
driver.get('https://www.pythonf.cn')
time.sleep(5)

search = driver.find_element_by_id("key")
search.send_keys(u'Pycharm')

3.find_element_by_tag_name通过html tag定位

上面在搜索框里输入字符我们也可以通过定位html tag来实现,输入框的tag是input,所以代码如下:

#coding=utf-8
from selenium import webdriver
import time

driver = webdriver.Chrome(executable_path="D:/chromedriver/chromedriver.exe")
driver.get('https://www.pythonf.cn')
time.sleep(5)

search = driver.find_element_by_tag_name("input")
search.send_keys(u'Pycharm')

一般不直接通过tag name定位,因为一个页面相同的html tag有很多,有可能会定位错误,我举得这个例子,刚好页面只有一个input输入框。

4.find_element_by_name通过name定位

还是拿上面输入框举例,使用上面的方法,右键元素-选检查,可以看到input框的name是’key’。

Snipaste_2019-12-12_20-15-43.png

所以代码是 find_element_by_name(‘key’)。

5.find_element_by_css_selector通过css来定位

有时用上述方法定位元素很繁琐时,往往通过css来定位会很方便,我也常常使用css来定位。还是拿PythonFree的搜索框来举例。我们右击搜索框选择检查,打开chrome的开发者工具,如图:

Snipaste_2019-12-12_20-22-55.png

右边标红处就是input框的css,’input’,完整代码如下:

#coding=utf-8
from selenium import webdriver
import time

driver = webdriver.Chrome(executable_path="D:/chromedriver/chromedriver.exe")
driver.get('https://www.pythonf.cn')
time.sleep(5)


search = driver.find_element_by_css_selector("input")
search.send_keys(u'Pycharm')

6.find_element_by_xpath通过xpath来定位

这种方法也是很适用,用上述方法难定位的就可以试试

Snipaste_2019-12-12_20-25-02.png

复制出来的搜索按钮Xpath是://*[@id="bs-example-navbar-collapse-1"]/form/button

7.find_elements_by_link_text通过文字链接来定位

这种方法是用来定位文字链接的,就是’‘标签括起来的文字。
比如我们要定位搜索按钮。

Snipaste_2019-12-12_20-27-48.png

find_element_by_link_text(u’搜索’)

第8种方法就是在第七种方法基础上可以模糊匹配字符。find_elements_by_partial_link_text

在使用上面的方法定位元素时,都要能唯一定位才行,比如一个页面有几个相同的id,相同的class name等时,这时就可能定位到错误的元素上去,这时就要使用上述方法的复数来定位。

  1. find_elements_by_name
  2. find_elements_by_xpath
  3. find_elements_by_link_text
  4. find_elements_by_partial_link_text
  5. find_elements_by_tag_name
  6. find_elements_by_class_name
  7. find_elements_by_css_selector

element后面多了一个s,会以列表的形式把定位到的相同元素全部返回,你要知道你需要的元素是第几个,通过数组下标来取对应的元素。

比如你要点击某个网站第三个链接,写法如下:
find_elements_by_tag_name(‘a’)[2].click()

Selenium定位元素的方法就写完了,还有一点说的就是,Selenium涉及到要操作字符串的地方,比如向输入框输入时,最好用unicode码。