python自动化3 selenium元素识别(XPATH)

XPATH

XPATH是什么?
XPATH是一门在XML文档中查找信息的语言,XPATH可用来在XML文档中对元素和属性进行遍历,主流的浏览器都支持XPATH,因为HTML页面在DOM中表示为XHTML文档。
Selenium WebDriver支持使用XPATH表达式来定位元素。
常用定位方法:
python自动化3 selenium元素识别(XPATH)_第1张图片

通过绝对路径定位

绝对路径的开头是一个斜线 (/),从网页的根节点html开始,逐层去查找需要定位的元素。
此方法缺点显而易见,当页面元素位置发生改变时,都需要修改,因此,并不推荐使用。
/html/body/div[1]/div[1]/div[5]/div/div/form/span[1]/input

from selenium import webdriver
from config_utils import config_u
from log_utils import LogUtils
from selenium.webdriver.firefox.service import Service
from selenium.webdriver.common.by import By

log_path = config_u.get_log_path
log_utils = LogUtils(log_path)

class WebDriver:
    def __init__(self,driver_path=config_u.get_driver_path):
        path = Service(driver_path)
        self.driver = webdriver.Firefox(service=path)

    def get_urls(self,urls):
        try:
            self.driver.get(urls)
            log_utils.print_file_log('info', '窗口打开成功')
        except Exception as e:
            log_utils.print_file_log('error','url错误:'+str(e))

    def quit_browser(self):
        self.driver.quit()

    def browser_back(self):
        self.browser_back()

    def find_element_xpath_send_keys(self,xpath_path,key_word):   
        self.driver.find_element(By.XPATH,xpath_path).send_keys(key_word)

if __name__ == '__main__':
    urls = 'https://baidu.com'
    driver = WebDriver()
    driver.get_urls(urls)
    driver.find_element_xpath_send_keys('/html/body/div[1]/div[1]/div[5]/div/div/form/span[1]/input','test')

通过相对路径定位

相对路径的开头是两个斜线(//),表示文件中所有符合模式的元素都会被选出来,即使是处于树中不同的层级也会被选出来。
举例:百度搜索框相对路径定位
自底向上尝试
//span[1]/input

from selenium import webdriver
from config_utils import config_u
from log_utils import LogUtils
from selenium.webdriver.firefox.service import Service
from selenium.webdriver.common.by import By

log_path = config_u.get_log_path
log_utils = LogUtils(log_path)

class WebDriver:
    def __init__(self,driver_path=config_u.get_driver_path):
        path = Service(driver_path)
        self.driver = webdriver.Firefox(service=path)

    def get_urls(self,urls):
        try:
            self.driver.get(urls)
            log_utils.print_file_log('info', '窗口打开成功')
        except Exception as e:
            log_utils.print_file_log('error','url错误:'+str(e))

    def quit_browser(self):
        self.driver.quit()

    def browser_back(self):
        self.browser_back()

    def find_element_xpath(self,xpath_path,key_word):
        self.driver.find_element(By.XPATH,xpath_path).send_keys(key_word)

if __name__ == '__main__':
    urls = 'https://baidu.com'
    driver = WebDriver()
    driver.get_urls(urls)
    driver.find_element_xpath('//span[1]/input','test')

通过元素索引定位

遇到同层级相同标签元素时,可以使用索引 (下标)表示,索引的初始值为1

使用元素属性定位元素属性定位

要求属性能够定位到唯一一个元素,如果存在多个相同条件的标签,默认定位第一个,具体格式 //标签名[@属性="属性值”]
//input[@maxlength=“255”] //标签名[@属性名=属性值]

from selenium import webdriver
from config_utils import config_u
from log_utils import LogUtils
from selenium.webdriver.firefox.service import Service
from selenium.webdriver.common.by import By

log_path = config_u.get_log_path
log_utils = LogUtils(log_path)

class WebDriver:
    def __init__(self,driver_path=config_u.get_driver_path):
        path = Service(driver_path)
        self.driver = webdriver.Firefox(service=path)

    def get_urls(self,urls):
        try:
            self.driver.get(urls)
            log_utils.print_file_log('info', '窗口打开成功')
        except Exception as e:
            log_utils.print_file_log('error','url错误:'+str(e))

    def quit_browser(self):
        self.driver.quit()

    def browser_back(self):
        self.browser_back()

    def find_element_xpath(self,xpath_path,key_word):
        self.driver.find_element(By.XPATH,xpath_path).send_keys(key_word)

if __name__ == '__main__':
    urls = 'https://baidu.com'
    driver = WebDriver()
    driver.get_urls(urls)
    driver.find_element_xpath('//input[@maxlength="255"]','test')

多属性定位:

支持多属性定位:and or
driver.find_element_by_xpath(’ //input[@id="kw and @maxlength=“255”])

支持通配符

driver.find_element_by_xpath(’ //input[@*="kw])

模糊定位

称为部分属性值定位
starts-with()
driver.find_element_by_xpath(‘//a[starts-with(@href,“http://news”)]’).click()
end-with()
driver.find_element_by_xpath(‘//a[ends-with(@href,“news.baidu.com”)]’).click()
substring() http;//news.baidu.com
driver.find element by_xpath(‘//a[substring(@href,8)=“news,baidu.com”]’)click()
contains()
driver.find_element_by_xpath(‘//a[contains(@href,“news.baidu.com”)]’).click()
应用场景:
1、元素信息过长时;
2、动态属性元素;(订单,取第一个订单)

元素文本定位

text()
driver.find_element_by_xpath(‘//a[text()=“新闻”]’).click()
driver.find_element_by_xpath(‘//a[contains(text()=“新闻”)]’).click()

你可能感兴趣的:(python,自动化,selenium)