iT邦幫忙

2022 iThome 鐵人賽

DAY 15
0
自我挑戰組

用Python學習網路爬蟲30天系列 第 15

[Day15] 動態網頁擷取2_Selenium網頁資料定位函數

  • 分享至 

  • xImage
  •  

Selenium網頁資料定位函數

  • find_element(By.XX, “ ”)  : 取出HTML網頁中符合的第1筆HTML元素
  • find_elements(By.XX, “ ”)  : 取出HTML網頁中符合的HTML元素
網頁資料定位函數 說明
find_element(s)(By.ID, “ ”) 使用id屬性值定位
find_element(s)(By.NAME, “ ”) 使用name屬性值定位
find_element(s)(By.LINK_TEXT, “ ”) 使用超連結文字定位
find_element(s)(By.PARTIAL_LINK_TEXT, “ ”) 使用部分超連結文字定位
find_element(s)(By.TAG_NAME, “ ”) 使用標籤名稱定位
find_element(s)(By.CLASS_NAME, “ ”) 使用class屬性值定位
find_element(s)(By.XPATH, “ ”) 使用XPath屬性定位
find_element(s)(By.CSS_SELECTOR, “ ”) 使用CSS選擇器定位
上述的函數為目前Selenium新版本(Version 4.X 以後)的表示寫法,如果為舊版本(Version 4.X 以前)則使用find_element(s)_by_XX(“ ”)函數表示。不要寫錯了!!! 不然執行程式時會出現錯誤訊息:找不到此函數屬性。

實作練習

以tronclass登入網頁與github登入網頁為例,練習使用Selenium工具定位資料位置。

  1. 使用id屬性
    https://ithelp.ithome.com.tw/upload/images/20220929/20152180L6OPHlZtUQ.png

    from selenium import webdriver
    from selenium.webdriver.common.by import By
    import os
    
    driver = webdriver.Chrome("./chromedriver")
    html_path = "file:///" +os.path.abspath("Tronclass.html")
    driver.implicitly_wait(10)
    driver.get(html_path)
    form = driver.find_element(By.ID, "content")
    print(form.tag_name)
    print(form.get_attribute("id"))
    driver.quit()
    

    執行結果:
    https://ithelp.ithome.com.tw/upload/images/20220929/20152180A3ekqca7iw.png

  2. 使用name屬性
    https://ithelp.ithome.com.tw/upload/images/20220929/20152180gIarKgIkDa.png

    from selenium import webdriver
    from selenium.webdriver.common.by import By
    import os
    
    driver = webdriver.Chrome("./chromedriver")
    html_path = "file:///" +os.path.abspath("Tronclass.html")
    driver.implicitly_wait(10)
    driver.get(html_path)
    user = driver.find_element(By.NAME, "username")
    print(user.tag_name)
    print(user.get_attribute("type"))
    

    執行結果:
    https://ithelp.ithome.com.tw/upload/images/20220929/20152180pGyd8vIgrS.png

  3. 使用XPath表達式

    from selenium import webdriver
    from selenium.webdriver.common.by import By
    import os
    
    driver = webdriver.Chrome("./chromedriver")
    html_path = "file:///" +os.path.abspath("Tronclass.html")
    driver.implicitly_wait(10)
    driver.get(html_path)
    # 定位<form>標籤
    form = driver.find_element(By.XPATH, "//form[@id='fm1']")
    print(form.get_attribute("type"))
    # 定位密碼欄位
    pwd = driver.find_element(By.XPATH, "//form[@id='fm1']/section[2]/input")
    print(pwd.get_attribute("type"))
    # 定位登入按鈕
    clear = driver.find_element(By.XPATH, "//input[@class='btn-submit']")
    print(clear.get_attribute("type"))
    driver.quit()
    

    執行結果:
    https://ithelp.ithome.com.tw/upload/images/20220929/20152180wpI7Na8v4y.png

  4. 使用標籤名稱
    https://ithelp.ithome.com.tw/upload/images/20220929/20152180VqrB9UCmkQ.png

    from selenium import webdriver
    from selenium.webdriver.common.by import By
    from selenium.webdriver.chrome.service import Service
    
    s = Service("chromedriver.exe")
    driver = webdriver.Chrome(service=s)
    driver.implicitly_wait(10)
    driver.get("https://github.com/login")
    p = driver.find_element(By.TAG_NAME, "h1")
    print(p.text)
    driver.quit()
    

    執行結果:
    https://ithelp.ithome.com.tw/upload/images/20220929/20152180HPgbTYHkz0.png

  5. 使用class屬性
    https://ithelp.ithome.com.tw/upload/images/20220929/20152180we4YTGFgnX.png

    from selenium import webdriver
    from selenium.webdriver.common.by import By
    from selenium.webdriver.chrome.service import Service
    
    s = Service("chromedriver.exe")
    driver = webdriver.Chrome(service=s)
    driver.implicitly_wait(10)
    
    driver.get("https://github.com/login")
    login= driver.find_element(By.CLASS_NAME, "login-callout")
    print(login.text)
    driver.quit()
    

    執行結果:
    https://ithelp.ithome.com.tw/upload/images/20220929/201521801wuF8EaBNm.png

  6. 使用CSS選擇器

    from selenium import webdriver
    from selenium.webdriver.common.by import By
    from selenium.webdriver.chrome.service import Service
    
    s = Service("chromedriver.exe")
    driver = webdriver.Chrome(service=s)
    driver.implicitly_wait(10)
    driver.get("https://github.com/login")
    h1 = driver.find_element(By.CSS_SELECTOR, "h1")
    print(h1.text)
    p = driver.find_element(By.CSS_SELECTOR, "p.login-callout")
    print(p.text)
    driver.quit()
    

    執行結果:
    https://ithelp.ithome.com.tw/upload/images/20220929/20152180heJbSI61LP.png


上一篇
[Day14] 動態網頁擷取1_Selenium與環境安裝
下一篇
[Day16] 動態網頁擷取3_與HTML表單進行互動
系列文
用Python學習網路爬蟲30天30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言