selenium 動態爬蟲的技巧

一、環境安裝

1. 開設一個新的測試環境

Miniconda下載網址:

https://docs.conda.io/en/latest/miniconda.html

直接下載:

https://repo.anaconda.com/miniconda/Miniconda3-latest-Windows-x86_64.exe

conda create --name se2024 python=3.9

2. 進入測試環境

(1) conda activate se2024

(2) 開啟程式放置的資料夾

     在桌面開設dw2024的資料夾

     實體路徑為:

     C:\Users\Administrator\Desktop\dw2024

(3) 再命令提示字元下進入 cd C:\Users\Administrator\Desktop\dw2024

3. 安裝 selenium 套件 (動態爬蟲的主要套件) 

pip install selenium

4. 下載webdriver (模擬瀏覽器)

pip install webdriver-manager

可透過官網下載 https://www.selenium.dev/downloads/

亦可透過瀏覽器官網下載

Chrome web driver 

https://developer.chrome.com/docs/chromedriver/downloads?hl=zh-tw

Chrome 115 以上版本請使用下方連結

https://googlechromelabs.github.io/chrome-for-testing/

5. 如何執行與操作

(1)執行程式與webdriver放在同一個路徑下

(2)執行程式 python test.py

(3)Notepad++ 
https://github.com/notepad-plus-plus/notepad-plus-plus/releases/download/v8.6/npp.8.6.Installer.x64.exe

test.py 範例程式

from selenium import webdriver

browser=webdriver.Chrome()

## chromedriver.exe 模擬器 與 code 同一個路徑

browser.get('https://tech.digitgeek.net/')

# browser.close()

##將瀏覽器關閉

from selenium import webdriver
# 啟動 Chrome 瀏覽器
browser = webdriver.Chrome()
# 打開目標網站
browser.get('https://tech.digitgeek.net/')
# 等待用戶輸入,避免瀏覽器立即關閉
input("按下 Enter 鍵以結束程式並關閉瀏覽器...")
# 程式結束時,關閉瀏覽器
browser.quit()


10 條回復   |  直到 1月前 | 558 次瀏覽




熱門評論
  1. 1
    digitgeek 1月前 支持  0 | 反對  0

    from selenium import webdriver
    from selenium.webdriver.common.by import By
    # 啟動 Chrome 瀏覽器
    browser = webdriver.Chrome()
    # 打開目標網站
    browser.get('https://www.google.com.tw/')
    # 針對物件名去找尋
    # inputA=browser.find_element_by_name('q')
    inputA=browser.find_element(By.NAME, "q")
    # 將關鍵字放入
    inputA.send_keys('python')
    # 執行按鈕
    inputA.submit()
    # 等待用戶輸入,避免瀏覽器立即關閉
    input("按下 Enter 鍵以結束程式並關閉瀏覽器...")
    # 程式結束時,關閉瀏覽器
    browser.quit()


    1. 1
      digitgeek 1月前 支持  0 | 反對  0

      from selenium import webdriver
      from selenium.webdriver.common.by import By
      import time
      import requests
      from bs4 import BeautifulSoup
      # 啟動 Chrome 瀏覽器
      browser = webdriver.Chrome()
      # 打開目標網站
      browser.get('https://www.google.com.tw/')
      time.sleep(3)
      # 針對物件名去找尋
      # inputA=browser.find_element_by_name('q') ## 舊
      inputA=browser.find_element(By.NAME, "q")
      # 將關鍵字放入
      inputA.send_keys('python')
      # 執行按鈕
      time.sleep(2)
      inputA.submit()
      # inputA=browser.find_element(By.NAME, "btnK") # 已經沒
      html=requests.get(browser).text
      sp=BeautifulSoup(html, 'lxml')
      # 等待用戶輸入,避免瀏覽器立即關閉
      input("按下 Enter 鍵以結束程式並關閉瀏覽器...")
      # 程式結束時,關閉瀏覽器
      browser.quit()


      1. 1
        digitgeek 1月前 支持  0 | 反對  0

        from selenium import webdriver
        from selenium.webdriver.common.by import By
        import time # 要做等待時間 假裝是人為
        import requests # 靜態爬蟲
        from bs4 import BeautifulSoup # 靜態爬蟲
        import csv # 存到 csv
        # 啟動 Chrome 瀏覽器
        browser = webdriver.Chrome()
        # 打開目標網站
        browser.get('https://www.google.com.tw/')
        time.sleep(3)
        # 針對物件名去找尋
        # inputA=browser.find_element_by_name('q') ## 舊
        inputA=browser.find_element(By.NAME, "q")
        # 將關鍵字放入
        inputA.send_keys('python')
        # 執行按鈕
        time.sleep(2)
        inputA.submit()
        # ================== 以上是用動態爬蟲 開啟網頁
        # inputA=browser.find_element(By.NAME, "btnK") # 已經沒
        # ================== 以下是用靜態爬蟲
        sp=BeautifulSoup(browser.page_source, 'html.parser')  ## lxml 直接抓取 HTML 原始碼
        # yuRUbf
        # LC20lb MBeuO DKV0Md
        # <h3 class="LC20lb MBeuO DKV0Md">Python - 維基百科,自由的百科全書</h3>
        datatag=sp.select('.yuRUbf')
        for i in range(len(datatag)): # len(datatag) 計算 datatag的資料長度
            texts=datatag[i].find_all('h3',{'class':'LC20lb MBeuO DKV0Md'})
            for j in range(len(texts)):
                print(texts[j].text)
                
        print("抓取成功")
        browser.close()

        補充: 

        pip install bs4

        pip install requests

        1. 1
          digitgeek 1月前 支持  0 | 反對  0

          from selenium import webdriver
          from selenium.webdriver.common.by import By
          import time # 要做等待時間 假裝是人為
          from bs4 import BeautifulSoup # 靜態爬蟲
          import csv # 存到 csv
          # 啟動 Chrome 瀏覽器
          browser = webdriver.Chrome()
          # 打開目標網站
          browser.get('https://news.tvbs.com.tw/')
          time.sleep(3)
          # ================== 以上是用動態爬蟲 開啟網頁
          # ================== 以下是用靜態爬蟲
          sp=BeautifulSoup(browser.page_source, 'html.parser')  ## lxml 直接抓取 HTML 原始碼
          datatag=sp.select('li a h2')
          for i in range(len(datatag)):
            print(datatag[i].text)
                  
          print("抓取成功")
          browser.close()


          1. 1
            digitgeek 1月前 支持  0 | 反對  0

            Select 的抓取方式

            from selenium import webdriver
            from selenium.webdriver.common.by import By
            from selenium.webdriver.support.ui import Select
            # 啟動 Chrome 瀏覽器
            browser = webdriver.Chrome()
            # 打開目標網站
            browser.get('https://www.wibibi.com/info.php?tid=194')
            # <select name="YourLocation" style="width:200px;">
            # <option value="Taipei">台北</option>
            # <option value="Taoyuan">桃園</option>
            # <option value="Hsinchu">新竹</option>
            # <option value="Miaoli">苗栗</option>
            # </select>
            # 抓取 YourLocation 標記的物件
            selectA=Select(browser.find_element(By.NAME, "YourLocation"))
            # 列出選項
            for op in selectA.options:
                print(op.text)
            browser.close()


            1. 1
              digitgeek 1月前 支持  0 | 反對  0

              <html>
              <head>
              <meta http-equiv="Content-Type" content="text/html; charset=utf-8">
              </head>
              <body> 
              <select name = "select_name">
                  <option value = "op_1">option 1</option>
                  <option value = "op_2">選項 2</option>
                  <option value = "op_3">選項三</option>
              </select>
              </body>
              </html>


              1. 1
                digitgeek 1月前 支持  0 | 反對  0

                選取選項值

                from selenium import webdriver
                from selenium.webdriver.common.by import By
                from selenium.webdriver.support.ui import Select
                # 啟動 Chrome 瀏覽器
                browser = webdriver.Chrome()
                # 打開目標網站
                browser.get('https://www.wibibi.com/info.php?tid=194')
                # 抓取 YourLocation 標記的物件
                selectA=Select(browser.find_element(By.NAME, "YourLocation"))
                # 點選 苗栗
                selectA.select_by_visible_text('苗栗')
                # 等待用戶輸入,避免瀏覽器立即關閉
                input("按下 Enter 鍵以結束程式並關閉瀏覽器...")
                # 程式結束時,關閉瀏覽器
                browser.quit()
                # browser.close()


                1. 1
                  digitgeek 1月前 支持  0 | 反對  0

                  from selenium import webdriver
                  from selenium.webdriver.common.by import By
                  from selenium.webdriver.support.ui import Select
                  # 啟動 Chrome 瀏覽器
                  browser = webdriver.Chrome()
                  # 打開目標網站
                  browser.get('https://www.twse.com.tw/zh/trading/historical/mi-5mins.html')
                  # 抓取 標記的物件 (select的物件名)
                  selectY=Select(browser.find_element(By.NAME, "yy"))
                  selectM=Select(browser.find_element(By.NAME, "mm"))
                  selectD=Select(browser.find_element(By.NAME, "dd"))
                  # 點選 苗栗
                  selectY.select_by_visible_text('民國 112 年')
                  selectM.select_by_visible_text('02月')
                  selectD.select_by_visible_text('02日 (四)')
                  # <button class="search">查詢</button>
                  selectBB=browser.find_element(By.CLASS_NAME, "search")
                  # 點擊按鈕
                  selectBB.click()
                  input("按下 Enter 鍵以結束程式並關閉瀏覽器...")
                  browser.quit()
                  # browser.close()


                  1. 1
                    digitgeek 1月前 支持  0 | 反對  0

                    點選按鈕

                    from selenium import webdriver
                    from selenium.webdriver.common.by import By
                    import time
                    # 啟動 Chrome 瀏覽器
                    browser = webdriver.Chrome()
                    # 打開目標網站
                    browser.get('https://sahitest.com/demo/clicks.htm')
                    time.sleep(3)
                    # 找尋按鈕的位址
                    # button=browser.find_element_by_xpath("/html/body/form/input[2]")
                    button=browser.find_element(By.XPATH, "/html/body/form/input[2]")
                    button.click()
                    # 檢查按鈕是否被選取
                    if button.is_selected():
                    	print("成功")
                    else:
                    	print("不成功")
                    input("按下 Enter 鍵以結束程式並關閉瀏覽器...")
                    browser.quit()


                    1. 1
                      digitgeek 1月前 支持  0 | 反對  0

                      Facebook 登入

                      # (1)找尋網頁特徵
                      # <input> id name 
                      # <img> name
                      # (2)使用抓取特徵
                      # from selenium.webdriver.common.by import By
                      # button=browser.find_element(By.XPATH, "/html/body/form/input[3]")
                      # button=browser.find_element(By.ID, "id名")
                      # button=browser.find_element(By.NAME, "name名")
                      # button=browser.find_element(By.CLASS_NAME, "class name 名")
                      from selenium import webdriver
                      from selenium.webdriver.common.by import By
                      import time
                      # 使用者輸入帳密
                      usr=input("請輸入帳號:")
                      pwd=input("請輸入密碼:")
                      # 啟動 Chrome 瀏覽器
                      browser = webdriver.Chrome()
                      # 打開目標網站
                      browser.get('https://www.facebook.com/')
                      print("Facebook已開啟")
                      time.sleep(3)
                      # 查詢特徵位置 填入資料
                      usermail=browser.find_element(By.ID, "email")
                      usermail.send_keys(usr)
                      time.sleep(2)
                      passwd=browser.find_element(By.ID, "pass")
                      passwd.send_keys(pwd)
                      time.sleep(2)
                      login=browser.find_element(By.CSS_SELECTOR, "button[name='login']")
                      login.click()
                      time.sleep(2)
                      input("按下 Enter 鍵以結束程式並關閉瀏覽器...")
                      browser.quit()




                      登入後才可發表內容