8-2(selenium-元素定位、handle)

2019-08-25  本文已影响0人  不知名的二狗

元素定位

八种定位方式

1.id定位
from selenium import webdriver
import time

driver = webdriver.Chrome()
driver.get("https://www.baidu.com")
time.sleep(10)
'''id定位'''
# 输入框中输入haluo
driver.find_element_by_id("kw").send_keys("haluo")
# 清空输入框
time.sleep(10)
driver.find_element_by_id("kw").clear()
time.sleep(10)
# 点击百度一下按钮
driver.find_element_by_id("su").click()
driver.close()
driver.quit()
出现错误1:

ImportError: sys.meta_path is None, Python is likely shutting down,结果原因是因为我之前执行程序没写driver.close()和driver.quit()

出现错误2:

浏览器先打开百度网页,然后chrom就闪退了,我以为是chromdriver兼容性问题,后来按着程序都中间都输出了一下,所有程序都是执行了的,只是我中间sleep时间太短,输入框输入之后,没有写sleep,以至觉察不到输入和删除的过程,后面就更感觉close的时候像闪退了。

2.name定位
driver.find_element_by_name('wd').send_keys('haha')
3.class定位
driver.find_element_by_class_name('s_ipt').send_keys('haha')
4.标签定位

会报错因为input标签不唯一

driver.find_element_by_tag_name('input').send_keys('haha')
5.链接文字定位
6.部分链接文字定位
driver.find_element_by_link_text('新闻')
driver.find_element_by_partial_link_text('闻')
7.xpath定位

通过chropath,找到xpath,xpath是唯一的,可以通过不同的属性去定位


xpath定位.png
注意:

上图中xpath为//a[@name='tj_trnews'],但是当我直接复制到pycharm会报错,需要将‘转义,然后就可以了。

driver.find_element_by_xpath('//a[@name=\'tj_trnews\']')
8.css定位
css定位.png
driver.find_element_by_css_selector('#kw').send_keys("haha")
处了上述8中单数element定位,还有8种elements复数定位,一次可以定位多个相同属性的元素。

控制台输出定位的元素和列表长度,并进行点击事件。

els = driver.find_elements_by_class_name('mnav')
print(els)
print(len(els))
els[4].click()

也可以写成

els = driver.find_elements_by_class_name('mnav')[4].click()
seleium 多窗口句柄操作
from selenium import webdriver
import time
driver = webdriver.Chrome()
driver.get("https://www.baidu.com")
time.sleep(2)
handle = driver.current_window_handle
print(handle)
# driver.find_element_by_link_text('新闻').click()
js='window.open("https://www.sogou.com");'
driver.execute_script(js)
# 再新开一个窗口,通过执行js来新开一个窗口,访问有道
js='window.open("http://www.youdao.com/");'
driver.execute_script(js)
handles = list(driver.window_handles)
print(len(handles))
handle_new = handles[2]
# 切换到新窗口
driver.switch_to.window(handle_new)
time.sleep(2)
print(driver.title)
# 切换到第一个窗口
driver.switch_to.window(handles[0])
time.sleep(2)
print(driver.title)
driver.close()
driver.quit()
implicitly_wait 隐藏

10秒时最大等待时间,如果10s内找不到会报错,只针对元素定位有效,并且针对当前页面

time.sleep(2) # 程序休眠
driver.implicitly_wait(10) 
上一篇下一篇

猜你喜欢

热点阅读