python selenium代碼示例

#!/usr/bin/env python 
# -*- coding:utf-8 -*-
from selenium import webdriver
import time
import urllib.parse
from selenium.webdriver.common.keys import Keys
from selenium.webdriver import ActionChains
from selenium.webdriver.support.ui import Select

from selenium.webdriver.common.by import By
# WebDriverWait 庫,負責循環等待
from selenium.webdriver.support.ui import WebDriverWait
# expected_conditions 類,負責條件出發
from selenium.webdriver.support import expected_conditions as EC

try:
    # selenium 開始不再支持 phantomJSdriver 可以改用 chromedriver geckodriver
    # driver = webdriver.PhantomJS(r"D:\Program Files (x86)\phantomjs-2.1.1-windows\bin\phantomjs.exe")
    driver = webdriver.Chrome()
    # driver = webdriver.Firefox()
    # driver.get("https://www.baidu.com/")

    # 獲取Cookie的值
    # print(driver.get_cookies()) #獲取所有cookie
    # [{'domain': '.baidu.com', 'expiry': 3721097795.504459, 'httpOnly': False, 'name': 'PSTM', 'path': '/', 'secure': False, 'value': '1573614131'}, {'domain': '.baidu.com', 'expiry': 3721097795.504422, 'httpOnly': False, 'name': 'BIDUPSID', 'path': '/', 'secure': False, 'value': '9B538A4E3A7D4B22CF1185EF64425B3F'}, {'domain': '.baidu.com', 'httpOnly': False, 'name': 'H_PS_PSSID', 'path': '/', 'secure': False, 'value': '1429_21122_18560_29568_29699_29220_26350'}, {'domain': '.baidu.com', 'httpOnly': False, 'name': 'delPer', 'path': '/', 'secure': False, 'value': '0'}, {'domain': '.baidu.com', 'expiry': 1605150148.504504, 'httpOnly': False, 'name': 'BAIDUID', 'path': '/', 'secure': False, 'value': '9B538A4E3A7D4B2289973E0090B4E8A2:FG=1'}, {'domain': 'www.baidu.com', 'httpOnly': False, 'name': 'BD_HOME', 'path': '/', 'secure': False, 'value': '0'}, {'domain': '.baidu.com', 'expiry': 1573700548.782194, 'httpOnly': False, 'name': 'BDORZ', 'path': '/', 'secure': False, 'value': 'B490B5EBF6F3CD402E515D22BCDA1598'}, {'domain': 'www.baidu.com', 'expiry': 1574478148, 'httpOnly': False, 'name': 'BD_UPN', 'path': '/', 'secure': False, 'value': '12314753'}]
    # print(driver.get_cookie("PSTM")) #獲取name爲某值的cookie
    # {'domain': '.baidu.com', 'expiry': 3721097795.504459, 'httpOnly': False, 'name': 'PSTM', 'path': '/', 'secure': False, 'value': '1573614131'}

    # 設置值
    # driver.find_element_by_id("kw").send_keys("王者榮耀")

    # 模擬全選
    # driver.find_element_by_id("kw").send_keys(Keys.CONTROL , "a")

    # 模擬剪切
    # driver.find_element_by_id("kw").send_keys(Keys.CONTROL , 'x')

    # 重新輸入
    # driver.find_element_by_id("kw").send_keys("豆瓣電影")

    # 模擬 enter鍵盤事件
    # driver.find_element_by_id("su").send_keys(Keys.ENTER)

    # 鼠標點擊
    # Message: no such element: Unable to locate element
    # driver.find_element_by_xpath("//form[@id='form']/span[@id='s_btn_wr']/input[@id='su']").click()
    # driver.find_element_by_id("su").click()

    # 等待兩秒
    # time.sleep(2)

    # 截屏
    # driver.save_screenshot("baidu.png")

    # 獲取屬性title、page_source、current_url
    # print(driver.title) #王者榮耀_百度搜索
    # print(driver.page_source)  #打印網頁渲染後的源代碼
    # print(driver.current_url)
    # print(urllib.parse.unquote(driver.current_url , 'utf-8'))

    ''' 定位UI元素 (WebElements) 
        下的API 單個元素選取
        find_element_by_id
        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
    '''
    # driver.find_element_by_name("wd").send_keys("西遊記")
    # driver.find_element_by_xpath("//input[@id='kw']").send_keys("東遊記")
    # driver.find_element_by_class_name("s_ipt").send_keys("周杰倫")
    # driver.find_element_by_link_text("hao123").click()           #根據超鏈接文本查找
    # driver.find_element_by_partial_link_text("123").click()      #根據超鏈接文本的部分文字內容查找
    # driver.find_element_by_css_selector("#kw").send_keys("doinb")  #根據css選擇器查找
    # time.sleep(1)
    # driver.save_screenshot("baidu.png")

    '''
      鼠標動作鏈
         (單擊 click 、雙擊 double_click 、右擊 context_click 、左鍵hold住 click_and_hold、拖拽 drag_and_drop等)
         move_by_offset
    '''
    # driver.get("https://etax.shanxi.chinatax.gov.cn/login")
    # driver.maximize_window()         # 最大化窗口
    # closeLayer = driver.find_element_by_id("closeLayer")
    # ActionChains(driver).move_to_element(closeLayer).click().perform() #關閉彈窗
    # login_btn = driver.find_element_by_id("login-btn")
    # ActionChains(driver).move_to_element(login_btn).context_click().perform()     #右擊
    # ActionChains(driver).move_to_element(login_btn).click().perform()             # 單擊登錄按鈕
    # drag_btn = driver.find_element_by_class_name("drag-btn")                      # 獲取滑塊對象
    # ActionChains(driver).move_to_element(drag_btn).click_and_hold().perform()     #左鍵按住滑塊
    # ActionChains(driver).drag_and_drop_by_offset(drag_btn,268,0).perform()  #對應起始位置的橫座標距離與縱座標距離
    # time.sleep(2)
    # driver.save_screenshot("shuijv.png")

    '''
        填充表單 
            index 索引從 0 開始
            value是option標籤的一個屬性值,並不是顯示在下拉框中的值
            visible_text是在option標籤文本的值,是顯示在下拉框的值
    '''
    # driver.get("http://tool.chacuo.net/cryptdes")
    # driver.maximize_window()  # 最大化窗口
    # s = Select(driver.find_element_by_class_name("h30"))
    # s.select_by_visible_text("CFB")
    # s.select_by_index('2')
    # s.select_by_value("cbc")
    # time.sleep(2)
    # driver.save_screenshot("select.png")

    '''
        彈窗處理 driver.switch_to.alert
                accept()   點擊Alert的【確認】按鈕
                authenticate(username,password)    給需要驗證的Alert發送賬號和密碼,默認點擊OK
                dismiss()  點擊Alert的【取消】按鈕
                send_keys(keysToSend)  在Alert的輸入框輸入信息
                text   獲取Alert上的文言信息
                switch_to.alert    切換到Alert
    '''
    # driver.get("https://www.etax-gd.gov.cn/sso/login?service=https://www.etax-gd.gov.cn/xxmh/html/index_login.html?bszmFrom=1&t=1561426315919")
    # driver.maximize_window()
    # driver.find_element_by_class_name("layui-layer-btn1").click()
    # time.sleep(1)
    # driver.find_element_by_id("upLoginButton").click()
    # time.sleep(1)
    # driver.switch_to.alert().accept()
    # driver.save_screenshot("alert.png")

    '''
     頁面前進和後退 
        driver.forward()     #前進
        driver.back()        # 後退
        driver.refresh()
    '''
    # driver.get("https://www.runoob.com/python3/python3-func-zip.html")
    # driver.maximize_window()
    # driver.back()
    # driver.forward()
    # driver.refresh()

    '''
        頁面等待: 隱式等待是等待特定的時間,顯式等待是指定某一條件直到這個條件成立時繼續執行。
        1、顯式等待
            API如下:
            title_is
            title_contains
            presence_of_element_located
            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
            invisibility_of_element_located
            element_to_be_clickable – it is Displayed and Enabled.
            staleness_of
            element_to_be_selected
            element_located_to_be_selected
            element_selection_state_to_be
            element_located_selection_state_to_be
            alert_is_present
            
        2、隱式等待
        driver.implicitly_wait(10) # seconds 可理解爲超時時間
    '''
    # 顯式
    driver.get("http://www.xxxxx.com/loading")
    element = WebDriverWait(driver, 10).until(
        EC.presence_of_element_located((By.ID, "myDynamicElement"))
    )
    # 隱式
    driver.implicitly_wait(10)  # seconds
    driver.get("http://www.xxxxx.com/loading")
    myDynamicElement = driver.find_element_by_id("myDynamicElement")

except NameError as e:
    print(e)
finally:
    # 關閉瀏覽器 driver.close()關閉當前窗口 driver.quit()退出驅動關閉所有窗口
    # driver.close()
    driver.quit()
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章