web页面八大元素定位方法

通过id定位百度输入框,并输入搜索词:阿里云

chrome_driver = webdriver.Chrome('../selenium_webdriver/chromedriver')
chrome_driver.get('https://www.baidu.com')
chrome_driver.maximize_window()
# 第一种
# chrome_driver.find_element_by_id('kw').send_keys("anonymous' blog")
# chrome_driver.find_element_by_id('su').click()
# 第二种
chrome_driver.find_element('id', 'kw').send_keys('阿里云')
chrome_driver.find_element('id', 'su').click()
time.sleep(5)
chrome_driver.quit()

通过name定位新闻并输入点击

chrome_driver = webdriver.Chrome('../selenium_webdriver/chromedriver')
chrome_driver.get('https://www.baidu.com')
chrome_driver.maximize_window()
# 第一种
# time.sleep(3)
# chrome_driver.find_element_by_name('tj_trnews').click()
# 第二种
time.sleep(3)
chrome_driver.find_element('name', 'tj_trnews').click()
time.sleep(2)
chrome_driver.quit()

通过class name定位百度输入框,并输入搜索词:anonymous' blog

chrome_driver = webdriver.Chrome('../selenium_webdriver/chromedriver')
chrome_driver.get('https://www.baidu.com')
chrome_driver.maximize_window()
chrome_driver.find_element_by_class_name('s_ipt').send_keys("anonymous' blog")
chrome_driver.find_element_by_id('su').click()
time.sleep(5)
chrome_driver.quit()

通过tag name来定位元素

HTML通过tag来定位不同页面的元素,不过因为一个标签往往被用来定义一类功能,所以通过tag name标签来识别单个元素的概率很低。

因为百度输入框的tag name是input且百度首页的input标签有很多,所以我们将一组input标签放到一个list中,然后在由索引来定位唯一需要的那个input元素,然后定位到百度输入框,并输入搜索词阿里云,点击百度一下按钮

chrome_driver = webdriver.Chrome('../selenium_webdriver/chromedriver')
chrome_driver.get('https://www.baidu.com')
chrome_driver.maximize_window()
chrome_driver.implicitly_wait(10)
input_list = chrome_driver.find_elements_by_tag_name('input')
print('input_list:', input_list)
print('len(input_list):', len(input_list))
print('input_list[7].tag_name:', input_list[7].tag_name)
input_list[7].send_keys('阿里云')
input_list[8].click()
print('input_list[8].location:', input_list[8].location)
time.sleep(5)
chrome_driver.quit()

link定位用法与前面几种有所不同,它专门用来定位文本链接。

定位百度首页页头的新闻

chrome_driver = webdriver.Chrome('../selenium_webdriver/chromedriver')
chrome_driver.get('https://www.baidu.com')
chrome_driver.maximize_window()
time.sleep(3)
chrome_driver.find_element_by_link_text('新闻').click()
time.sleep(3)
chrome_driver.quit()

partial link定位是对link定位的一种补充,有些文字链接比较长,这个时候我们可以取文字链接的部分文字进行定位,只要这部分文字可以唯一的标示这个链接即可。

比如定位百度首页页尾的京公网安备11000002000001,这时候只选取部分文本即可。

chrome_driver = webdriver.Chrome('../selenium_webdriver/chromedriver')
chrome_driver.get('https://www.baidu.com')
chrome_driver.maximize_window()
time.sleep(3)
chrome_driver.find_element_by_partial_link_text('安备1100').click()
time.sleep(3)
chrome_driver.quit()

XPath表达式定位元素

可以在chrome浏览器中按F12, 选中需要用Xpath定位的元素, 右键选择copy, 选择copy full XPath(绝对路径)或copy XPath(相对路径),不过一般不用这个工具。

①绝对路径定位(不推荐), 通过F12查看页面源代码,参考开发者工具所展示的源代码层级关系,可以通过下面的方式定位到百度输入框百度一下搜索按钮

driver.find_element_by_xpath('/html/body/div[2]/div[2]/div[5]/div[1]/div/form/span[1]/input').send_keys('哇哈哈') 
driver.find_element_by_xpath('/html/body/div[2]/div[2]/div[5]/div[1]/div/form/span[2]/input').click()

②通过绝对路径定位到百度输入框和百度一下搜索按钮

chrome_driver .find_element_by_xpath('//*[@id="kw"]').send_keys('蒙牛')
chrome_driver .find_element_by_xpath('//*[@id="su"]').click()

元素定位辅助工具ChroPath

安装方法

Chrome网上应用商店搜索ChroPath,然后安装即可。

ChroPath使用示例

element_positing