# 八種單數定位方式:element
from selenium import webdriver
import time
driver = webdriver.Firefox()
time.sleep(2) # 等待2秒
driver.get('https://www.baidu.com')
1、id定位:find_element_by_id()
# 定位到輸入框,輸入“中文”

time.sleep(2)
driver.find_element_by_id('kw').send_keys('中文')

2、name定位:find_element_by_name()
# 根據name定位到百度貼吧的輸入框,輸入“你好”

driver.find_element_by_name('kw1').send_keys('你好')

3、class定位:find_element_by_class_name()
# 當class唯一時,才能使用此方法
# 根據class屬性找到輸入框,輸入“你好”

driver.find_element_by_class_name('s_ipt').send_keys('你好')

4、根據標簽名定位:find_element_by_tag_name() (由於標簽名不唯一,不建議用此方法)

driver.find_element_by_tag_name('body')
# 獲取定位元素下的文本信息
t = driver.find_element_by_tag_name('body').text
print(t)

5、link定位(鏈接):find_element_by_link_text()
# <a class="mnav" name="tj_trnews" href="http://news.baidu.com">新聞</a>
# href="http://news.baidu.com": 一般為link屬性
# 根據link的文字內容“新聞”定位到link鏈接
driver.find_element_by_link_text('新聞').click()
6、partial_link定位
# 當代表link鏈接的文字內容過長時,可使用此方式截取部分文字定位

driver.find_element_by_partial_link_text('hao').click()

7、Xpath定位:find_element_by_xpath()

xpath定位:.//*[@class="XXX"]、.//*[@id="XXX"]、.//*[@name="XXX"]、.//input(匹配input標簽)、.//*[text()="文字內容"]、.//*[contains(text(),"文字內容")](匹配text屬性里面有”文字內容”的所有內容)、
driver.find_element_by_xpath(".//*[@id='u1']/a[3]").click()

8、CSS定位:find_element_by_css_selector()(不唯一)

driver.find_element_by_css_selector("#kw").send_keys("你好")

復數定位方式:elements (對元素不唯一),以id為例:
# 單數定位:
driver.find_element_by_id('kw').send_keys('中文')

# 復數定位:根據找出的元素的下標定位
elements = driver.find_elements_by_id('kw')
print(len(elements)) # 當不清楚定位到幾個元素的時候,可以用此方法打印出來篩選
elements[0].send_keys('中文')

# 當class屬性有多個的時候,帶空格
# 當有多個class屬性的時候,此空格並不是空的字符串,而是此class具有多重屬性
# class="search_ipt search_inp_border j_search_input tb_header_search_input"
# 貼吧輸入框
# 確定其中某一個屬性是唯一以后,取此屬性即可
driver.find_element_by_class_name("search_ipt").send_keys("你好")

