正如我的標題所說。為了避免 Selenium 的過時警告。我嘗試使用我發現的新格式。結果以某種方式只回傳 1 個元素。如何修復它以回傳元素?僅供參考我抓取網站。我在 Colab 上作業,所以我可以更輕松地與我的同事分享。
這是我的代碼
#!pip install selenium
#!pip install IPython
#!pip install pandas
#!apt-get update
#!apt install chromium-chromedriver
from selenium import webdriver
chrome_options = webdriver.ChromeOptions()
chrome_options.add_argument('--headless')
chrome_options.add_argument('--no-sandbox')
chrome_options.add_argument('--disable-dev-shm-usage')
driver = webdriver.Chrome('chromedriver',chrome_options=chrome_options)
import pandas as pd
from IPython.display import display
from selenium.webdriver.common.by import By
website = 'https://www.bitkub.com/fee/cryptocurrency'
driver.get(website)
#pull_data
coins = driver.find_elements(By.TAG_NAME,'tr')
檢查它包含什么元素(不知何故只有1個)
print(coins)
[<selenium.webdriver.remote.webelement.WebElement (session="091bac0ea46529043f4d84786ebc705f", element="76396e66-6516-4dd0-9d85-bc66bfad4676")>]
uj5u.com熱心網友回復:
理想情況下coins應該是一個元素串列。
但是,要提取硬幣的名稱,您需要誘導WebDriverWait for visibility_of_all_elements_located()并且您可以使用以下任一Locator Strategies:
使用CSS_SELECTOR:
driver.get('https://www.bitkub.com/fee/cryptocurrency') print([my_elem.text for my_elem in WebDriverWait(driver, 20).until(EC.visibility_of_all_elements_located((By.CSS_SELECTOR, "tbody tr td:nth-child(2) span")))])使用XPATH:
driver.get('https://www.bitkub.com/fee/cryptocurrency') print([my_elem.text for my_elem in WebDriverWait(driver, 20).until(EC.visibility_of_all_elements_located((By.XPATH, "//tbody//tr//following::td[2]//span")))])注意:您必須添加以下匯入:
from selenium.webdriver.support.ui import WebDriverWait from selenium.webdriver.common.by import By from selenium.webdriver.support import expected_conditions as EC
uj5u.com熱心網友回復:
發生的情況是您需要 webdriver 等待并等待所有元素的可見性。
wait = WebDriverWait(driver, 10)
trs = wait.until(ec.visibility_of_all_elements_located((By.TAG_NAME, "tr")))
進口:
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as ec
轉載請註明出處,本文鏈接:https://www.uj5u.com/shujuku/424675.html
