美文网首页
8-2(selenium-元素定位、handle)

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

作者: 不知名的二狗 | 来源:发表于2019-08-25 11:55 被阅读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) 
    

    相关文章

      网友评论

          本文标题:8-2(selenium-元素定位、handle)

          本文链接:https://www.haomeiwen.com/subject/xtjcectx.html