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定位.pngdriver.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)