• selenium学习笔记(1)


    selenium

    http://selenium-python.readthedocs.io/index.html

    https://www.seleniumhq.org/projects/ide/

     

    声明浏览器对象,需要安装对应的浏览器驱动,记住要跟对应的浏览器版本相同,例如,chrome,安装chromedriver

    from selenium import webdriver
    browser = webdriver.Chrome()
    browser = webdriver.Firefox()
    browser = webdriver.Edge()
    browser = webdriver.PhantomJS()
    browser = webdriver.Safari()

     

     

    from selenium import webdriver
    browser = webdriver.Chrome() 
    browser.get('https://www.baidu.com')
    browser.page_source                              # 返回当前页面源码
    browser.current_url                              # 返回当前URL
    browser.close()                                  # 关闭当前窗口
    browser.quit()                                   # 关闭浏览器
     
    input=browser.find_element_by_id(‘kw’)           # 获取id叫做kw的元素(标签) ,通过查看可知,是输入框说在的位置
    browser.send_keys("python")                      # 把’python’传递给input元素,即向输入框输入东西
    browser.clear()                                  # 清空输入框

     

     

    browse.get(‘https://www.zhihu.com/explore’)

    element = driver.execute_script("return $('.cheese')[0]")        #通过javascript,有些动作没有提供API,例如进度条下拉
    result = browser.find_element_by_class_name(‘zu-top’)         #获取classs属性为‘zu-top’的节点
    result.text                                                      #获取节点里面的文本值

    result.get_attribute('class')                                  #获取class的属性

    result.id                                                              #获取ID
    result.location                                                   #获取位置坐标(相对位置)
    result.tag_name                                               #获取标签名
    result.size                                                        #获取节点大小(即长宽高)

     

     

    元素定位

     

    单个元素定位

    find_element_by_id                         

    find_element_by_name                       

    find_element_by_xpath                      

    find_element_by_link_text                  

    find_element_by_partial_link_text          

    find_element_by_tag_name                   

    find_element_by_class_name                 

    find_element_by_css_selector               

     

    多个元素定位

    find_elements_by_name                      

    find_elements_by_xpath                     

    find_elements_by_link_text                 

    find_elements_by_partial_link_text         

    find_elements_by_tag_name                  

    find_elements_by_class_name                

    find_elements_by_css_selector              

     

    browser.find_element_by_id("coolestWidgetEvah")                          #ID查找

    browser.find_elements_by_xpath('//*[@id="q"]')                              #通过Xpath

    browser.find_elements_by_class_name("cheese")                         #按类名查找
    browser.find_elements_by_link_text("cheese")                              #按文本查找
    browser.find_elements_by_partial_link_text("cheese")                  #按文本查找(模糊)

    browser.find_elements_by_tag_name("iframe")                            #按标签查找
    browser.find_elements_by_name("cheese")                                #按名称查找


    <div id="food">

        <span class="dairy">milk</span>
        <span class="dairy aged">cheese</span>
    </div>
    cheese = driver.find_elements_by_css_selector("#food span.dairy.aged")  #通过css

    元素交互操作 : 对获取的元素调用交互方法

    更多操作: http://selenium-python.readthedocs.io/api.html#module-selenium.webdriver.remote.webelement

     

    from selenium import webdriver
    import time
    browser = webdriver.Chrome()
    browser.get('https://www.taobao.com')
    input = browser.find_element_by_id('q')                        # 找到ID
    input.send_keys('iPhone')                                       # send_keys发送值
    time.sleep(1)

    input.clear()
    input.send_keys('iPad')
    button = browser.find_element_by_class_name('btn-search')      #切换到点击按钮
    button.click()                                                   # click点击

     

     

    拖放

    交互动作 : 将动作附加到动作链中串行执行

    更多操作: http://selenium-python.readthedocs.io/api.html#module-selenium.webdriver.common.action_chains

     

    from selenium import webdriver
    from selenium.webdriver import ActionChains
    browser = webdriver.Chrome()
    url = 'http://www.runoob.com/try/try.php?filename=jqueryui-api-droppable'
    browser.get(url)
    browser.switch_to.frame('iframeResult')                                          #切换到子frame
    source = browser.find_element_by_css_selector('#draggable')     #通过CSS找出对象
    target = browser.find_element_by_css_selector('#droppable')

    actions = ActionChains(browser)                                         #ActionChains实例化行动链
    actions.drag_and_drop(source, target)                             #drag_and_drop按住鼠标左键移动到目标并释放
    actions.perform()                                                             #perform执行所有存储的操作。

     

    切换Frame

    from selenium import webdriver
    from selenium.common.exceptions import NoSuchElementException

    browser = webdriver.Chrome()
    url = 'http://www.runoob.com/try/try.php?filename=jqueryui-api-droppable'
    browser.get(url)
    browser.switch_to.frame('iframeResult')
    source = browser.find_element_by_css_selector('#draggable')
    print(source)
    try:
        logo = browser.find_element_by_class_name('logo')
    except NoSuchElementException:
        print('NO LOGO')
    browser.switch_to.parent_frame()                              #切换到父frame
    logo = browser.find_element_by_class_name('logo')
    print(logo)
    print(logo.text)

     

     

    选项卡管理

    import time
    from selenium import webdriver
    browser = webdriver.Chrome()
    browser.get('https://www.baidu.com')
    browser.execute_script('window.open()')                  #通过javascript打开新选项卡
    print(browser.window_handles)    #该结果返回的是新选项卡的句柄,有了句柄才能获得控制给窗口的权限

    browser.switch_to.window(browser.window_handles[1])     #切换选项卡获取淘宝
    browser.get('https://www.taobao.com')

    time.sleep(1)
    browser.switch_to.window(browser.window_handles[0])     #切换选项卡获取python
    browser.get('https://python.org')

     

    前进后退

    import time
    from selenium import webdriver
    browser = webdriver.Chrome()
    browser.get('https://www.baidu.com/')
    browser.get('https://www.taobao.com/')
    browser.back()              # 后退
    time.sleep(1)

    browser.forward()           # 前进
    browser.close()

    Cookies

    from selenium import webdriver
    browser = webdriver.Chrome()
    browser.get('https://www.zhihu.com/explore')
    print(browser.get_cookies())                    
    browser.add_cookie({'name': 'name', 'domain': 'www.zhihu.com', 'value': 'germey'})
    print(browser.get_cookies())
    browser.delete_all_cookies()
    print(browser.get_cookies())

     

     

    异常处理:

    详细文档:http://selenium-python.readthedocs.io/api.html#module-selenium.common.exceptions

    from selenium import webdriver
    from selenium.common.exceptions import TimeoutException, NoSuchElementException
    browser = webdriver.Chrome()            # 超出时间异常
    try:
        browser.find_element_by_id('hello')
    except NoSuchElementException:          # 找不到元素异常
       
    print('No Element')

    finally:
        browser.close()

     

     

    隐式等待:  # implicitly_wait

    详细内容:http://selenium-python.readthedocs.io/waits.html#implicit-waits

    当查找节点而节点并没有立即出现的时候,隐式等待将等待一段时间再查找DOM,默认的时间是0。

    from selenium import webdriver
    browser = webdriver.Chrome()
    browser.implicitly_wait(10)
    browser.get('https://www.zhihu.com/explore')
    input = browser.find_element_by_class_name('zu-top-add-question')
    print(input)

     

     

    显式等待:# WebDriverWait

    详细内容:http://selenium-python.readthedocs.io/api.html#module-selenium.webdriver.support.wait

                    http://selenium-python.readthedocs.io/waits.html#explicit-waits

    如果在规定时间内加载出来了这个节点,就返回查找的节点;如果到了规定时间依然没有加载出该节点,则抛出超时异常。

    这里首先引入WebDriverWait这个对象,指定最长等待时间,然后调用它的until()方法,传入要等待条件expected_conditions。比如,这里传入了presence_of_element_located这个条件,代表节点出现的意思,其参数是节点的定位元组,也就是ID为q的节点搜索框。

     

    from selenium import webdriver
    from selenium.webdriver.common.by import By
    from selenium.webdriver.support.ui import WebDriverWait
    from selenium.webdriver.support import expected_conditions as EC

    browser = webdriver.Chrome()
    browser.get('https://www.taobao.com/')
    wait = WebDriverWait(browser, 10)                                      # WebDriverWait 驱动等待,绑定对象,设置等待时间
    input = wait.until(EC.presence_of_element_located((By.ID, 'q')))    # 调用它的until()方法,传入要等待条件 

      expected_conditions
    button = wait.until(EC.element_to_be_clickable((By.CSS_SELECTOR, '.btn-search')))

    print(input, button)

    from selenium.webdriver.support import expected_conditions as EC   方法:

    使用方法:http://selenium-python.readthedocs.io/api.html#module-selenium.webdriver.support.expected_conditions

    title_is                                                                                     标题是某内容
    title_contains                                                                          标题包含某内容
    presence_of_element_located                                              元素加载出,传入定位元组,如(By.ID, 'p')
    visibility_of_element_located                                                元素可见,传入定位元组
    visibility_of                                                                             可见,传入元素对象
    presence_of_all_elements_located                       所有元素加载出
    text_to_be_present_in_element                            某个元素文本包含某文字
    text_to_be_present_in_element_value                  某个元素值包含某文字
    frame_to_be_available_and_switch_to_it frame         加载并切换
    invisibility_of_element_located                            元素不可见
    element_to_be_clickable                                  元素可点击
    staleness_of                                                判断一个元素是否仍在DOM,可判断页面是否已经刷新
    element_to_be_selected                                     元素可选择,传元素对象
    element_located_to_be_selected                                         元素可选择,传入定位元组
    element_selection_state_to_be                            传入元素对象以及状态,相等返回True,否则返回False
    element_located_selection_state_to_be                    传入定位元组以及状态,相等返回True,否则返回False
    alert_is_present                                           是否出现Alert

     

     

     

    from selenium.webdriver.common.by import By  方法:

    By.ID                               = 'ID'

    By.CLASS_NAME               = 'class名'

    By.CSS_SELECTOR                = 'CSS选择'

    By.NAME                        = 'name'

    By.LINK_TEXT                     = '文本查询'

    By.PARTIAL_LINK_TEXT          = '文本(模糊)查询'

    By.TAG_NAME                  = '标签'

    By.XPATH                      = 'xpath'

  • 相关阅读:
    PAT 甲级 1115 Counting Nodes in a BST (30 分)
    PAT 甲级 1114 Family Property (25 分)
    PAT 甲级 1114 Family Property (25 分)
    Python Ethical Hacking
    Python Ethical Hacking
    Python Ethical Hacking
    Python Ethical Hacking
    Python Ethical Hacking
    Python Ethical Hacking
    Python Ethical Hacking
  • 原文地址:https://www.cnblogs.com/hum0ro/p/9226266.html
Copyright © 2020-2023  润新知