Python-Selemium元素定位

1、html

下面的html文件是後面要使用到的form.html,頁面大概以下:css

form頁面

<!DOCTYPE html>
<html>
<head>
    <title>查找元素</title>
    <meta charset="utf-8">
</head>
<body>
    <div id="container">
        <form>
            user:<input type="text" name="user" id="user"><br /><br />
            email:<input type="text" name="email" id="email"><br /><br />
            male:<input type="radio" name="sex" id="male" checked="">&nbsp;&nbsp;&nbsp;&nbsp;
            female:<input type="radio" name="sex" id="female"><br /><br />
            讀書:<input type="checkbox" name="hobby" id="read" checked="">&nbsp;&nbsp;&nbsp;&nbsp;
            電影:<input type="checkbox" name="hobby" id="movie">&nbsp;&nbsp;&nbsp;&nbsp;
            運動:<input type="checkbox" name="hobby" id="sport">
            <br /><br />
            語言:<select>
                <option value="Python" id="python">Python</option>
                <option value="Java" id="java" selected="selected">Java</option>
                <option value="C++" id="cpp">C++</option>
            </select>
            <br /><br />
            <button type="submit">提交</button>
            <button type="reset">重置</button>
        </form>
    </div>
    <div>
        <a href="abc" class="aele">abc</a><br />
        <a href="bbc" class="aele">bbc</a><br />
        <a href="def" class="aele">def</a><br />
    </div>
</body>
</html>

2、WebElement

方法屬性 說明
id_ 獲取元素的ID
tag_name 獲取元素標籤名
text 獲取元素的文本
click() 單擊元素
submit() 提交表單
clear() 清除一個文本輸入元素的文本
get_attribute() 得到元素屬性值
is_selected() 判斷元素是否被選中
is_enabled() 判斷元素是否可用
send_keys()   在輸入框裏輸入內容

沒有括號的是屬性,有括號的是方法html

3、id與name屬性選擇

find_element_by_id(id_)
find_elements_by_id(id_)
find_element_by_name(attr_name)
find_elements_by_name(attr_name)
from selenium import webdriver

driver = webdriver.Firefox()

file_path = r'file:///F:\tmp\form.html'
driver.get(file_path)

user_ele = driver.find_element_by_id("user")
# text
print(user_ele.get_attribute("type"))
# input
print(user_ele.tag_name)
# True
print(user_ele.is_enabled())
# 將改元素輸入值curitis
user_ele.send_keys("curitis")

sex_ele = driver.find_element_by_name("sex")
# <class 'selenium.webdriver.firefox.webelement.FirefoxWebElement'>
print(type(sex_ele))
# True
print(sex_ele.is_selected())
# male
print(sex_ele.get_attribute("id"))

sex_eles = driver.find_elements_by_name("sex")
# <class 'list'>
print(type(sex_eles))
# True male|True male|
for ele in sex_eles:
    print(" ".join([str(sex_ele.is_selected()), str(sex_ele.get_attribute("id"))]), end="|")

print()
python_ele = driver.find_element_by_id("python")
# False
print(python_ele.is_selected())
java_ele = driver.find_element_by_id("java")
# True
print(java_ele.is_selected())

4、tag與class名稱選擇

find_element_by_tag_name(tag_name)
find_elements_by_tag_name(tag_name)
find_element_by_class_name(class_name)
find_elements_by_class_name(class_name)
from selenium import webdriver

options = webdriver.FirefoxOptions()
options.headless = True
driver = webdriver.Firefox(options=options)

file_path = r'file:///F:\tmp\form.html'
driver.get(file_path)

aele = driver.find_element_by_tag_name("a")
# abc
print(aele.text)

aeles = driver.find_elements_by_tag_name("a")
# abc bbc def
for aele in aeles:
    print(aele.text, end=" ")

print()
aele = driver.find_element_by_class_name("aele")
# abc
print(aele.text)

aeles = driver.find_elements_by_class_name("aele")
# abc bbc def
for aele in aeles:
    print(aele.text, end=" ")

5、css選擇器

find_element_by_css_selector(css_selector)
find_elements_by_css_selector(css_selector)
from selenium import webdriver

options = webdriver.FirefoxOptions()
options.headless = True
driver = webdriver.Firefox(options=options)

file_path = r'file:///F:\tmp\form.html'
driver.get(file_path)

pytho_sele = driver.find_element_by_css_selector("#python")
# Python
print(pytho_sele.get_attribute("value"))

aele = driver.find_element_by_css_selector(".aele")
# abc
print(aele.text)

aeles = driver.find_elements_by_css_selector(".aele")
# abc bbc def
for aele in aeles:
    print(aele.text, end=" ")

6、xpath

find_element_by_xpath(xpath)
find_elements_by_xpath(xpath)
from selenium import webdriver

options = webdriver.FirefoxOptions()
options.headless = True
driver = webdriver.Firefox(options=options)

file_path = r'file:///F:\tmp\form.html'
driver.get(file_path)

# 查找id爲email的input
print(driver.find_element_by_xpath("//input[@id='email']").get_attribute("id"))

# div後的a的倒數第2個
print(driver.find_element_by_xpath("//div/a[last()-1]").text)
# div下的第一個a
print(driver.find_element_by_xpath("//div/a[position()<2]").text)

# div下a標籤下有個文本包含'e'的元素
print(driver.find_element_by_xpath("//div/a[contains(text(),'e')]").text)

# div下href='bbc'的a標籤
print(driver.find_element_by_xpath("//div/a[@href='bbc']").text)

7、連接定位

find_element_by_link_text(link_text)
find_elements_by_link_text(link_text)
find_element_by_partial_link_text(partial_link_text)
find_elements_by_partial_link_text(partial_link_text)
from selenium import webdriver

options = webdriver.FirefoxOptions()
options.headless = True
driver = webdriver.Firefox(options=options)

file_path = r'file:///F:\tmp\form.html'
driver.get(file_path)

# 必須徹底匹配
print(driver.find_element_by_link_text("abc").get_attribute("href"))
# print(driver.find_element_by_link_text("a"))

# 只要標籤文本中包含b就能夠
btxt = driver.find_elements_by_partial_link_text("b")
for txt in btxt:
    print(txt.get_attribute("href"))
相關文章
相關標籤/搜索