2 选择元素,定位目标

 参考:https://blog.csdn.net/weixin_36279318/article/details/79475388

要找到目标元素,通过浏览器检查的方式或者按F12键,找到该控件元素,通过其ID、class等属性,能够唯一定位到该元素。

Selenium提供了8种定位方式。

  • id
  • name
  • class name
  • tag name
  • link text
  • partial link text
  • xpath
  • css selector

这8种定位方式在Python selenium中所对应的方法为:

  • find_element_by_id()
  • find_element_by_name()
  • find_element_by_class_name()
  • find_element_by_tag_name()
  • find_element_by_link_text()
  • find_element_by_partial_link_text()
  • find_element_by_xpath()
  • find_element_by_css_selector()

---------------------------------------------------------------------------------------

wd = webdriver.Chrome(r'd:webdriverschromedriver.exe')

wd.find_element_by_id('kw')                             --根据ID属性定位元素

wd.find_elements_by_class_name('animal')    --根据class属性定位元素

   我们要选择 所有的 动物,注意element后面多了个s

   find_elements_by_class_name 方法返回的是找到的符合条件的 所有 元素 (这里有3个元素), 放在一个 列表 中返回。

   而如果我们使用 find_element_by_class_name (注意少了一个s) 方法, 就只会返回 第一个 元素。

wd.find_elements_by_tag_name('div')             --根据tag定位

element.send_keys('黑羽魔巫宗 ')                  --发送内容

element.click()    --点击方法

# 等待 2 秒,等浏览器加载完成
from time import sleep
sleep(2)

Selenium 的 Webdriver 对象 有个方法叫 implicitly_wait

wd.implicitly_wait(10) 

如果找不到元素, 每隔 半秒钟 再去界面上查看一次, 直到找到该元素, 或者 过了10秒 最大时长。

element与elements的区别:

elements = wd.find_elements_by_class_name('animal')

for element in elements:                --把所有的元素打印,用循环
  print(element.text)

会输出所有的class_name为animal的文本值,即列表:  狮子 老虎 山羊

通过 WebElement 对象的 text属性 可以获取所有元素的文本内容。如无符合条件的,则返回空列表。用elements的对象不能为列表,需要是唯一的,即不能多个animal对象。

若elements = wd.find_element_by_class_name('animal')

print(elements.text)    则只得到第一个值,即狮子。如无符合条件,则抛出异常。

元素也可以有 多个class类型 ,多个class类型的值之间用 空格 隔开,比如

<span class="chinese student">张三</span>

注意,这里 span元素 有两个class属性,分别 是 chinese 和 student, 而不是一个 名为 chinese student 的属性。

tag为标签,即<后面的那个,如<div,则div为我们要的tag_name。

 elements = wd.find_elements_by_tag_name('div')

---------------------------------------------------------------------------------------

通过WebElement对象选择元素

不仅 WebDriver对象有 选择元素 的方法, WebElement对象 也有选择元素的方法。

WebElement对象 也可以调用 find_elements_by_xxx, find_element_by_xxx 之类的8种方法

wd = webdriver.Chrome(r'd:webdriverschromedriver.exe')

wd.get('http://cdn1.python3.vip/files/selenium/sample1.html')

element = wd.find_element_by_id('container')

# 限制 选择元素的范围是 id 为 container 元素的内部。
spans = element.find_elements_by_tag_name('span')
for span in spans:
  print(span.text)

输出结果就只有

内层11
内层12
内层21

链接定位元素

wd.find_element_by_link_text("访问bing网站").click()
#wd.find_element_by_link_text("hao123")

wd.find_element_by_partial_link_text("访问").click()
wd.find_element_by_partial_link_text("bing").click()
wd.find_element_by_partial_link_text("网站").click()

 成功找到对应的链接位置,且点击成功打开新页面。

原文地址:https://www.cnblogs.com/Tsingje/p/13974666.html