簡體   English   中英

使用 Selenium/XPath/Python 抓取文本

[英]Grabing text using Selenium/XPath/Python

我想從Johns Hopkins Covid 儀表板grep 死亡總數。 我想使用 Selenium、Python 和 Selenium 的 chrome 驅動程序來做到這一點。 死亡人數可以在路徑//*[@id="ember1915"]/svg/g[2]/svg/text

在此處輸入圖片說明

這是我的腳本:

from selenium.webdriver import Chrome
from selenium import webdriver
from selenium.webdriver.common.keys import Keys

with Chrome() as driver:
    driver.get('https://coronavirus.jhu.edu/map.html')
    driver.implicitly_wait(20) # Waits for 20 s for the entire page to loads.
    

    diplayElement = driver.find_element_by_xpath('//*[@id="ember1915"]/svg/g[2]/svg/text')

它失敗並出現錯誤“沒有這樣的元素:

Unable to locate element: {"method":"xpath","selector":"//*[@id="ember1915"]/svg/g[2]/svg/text"}”.

這也發生在我試圖抓取的其他網站上。

我怎樣才能解決這個問題? 這個錯誤的原因是什么?

來自約翰霍普金斯大學 Covid 儀表板的死亡總數(即905,181人)位於<iframe>因此您必須:

  • Induce WebDriverWait等待所需的框架可用並切換到它

  • visibility_of_element_located()引入WebDriverWait ,您可以使用以下任一定位器策略

    • 使用XPATHget_attribute()

       driver.get('https://coronavirus.jhu.edu/map.html') WebDriverWait(driver, 20).until(EC.frame_to_be_available_and_switch_to_it((By.XPATH,"//iframe[@title='Coronavirus COVID-19 Global Cases by Johns Hopkins CSSE']"))) print(WebDriverWait(driver, 60).until(EC.visibility_of_element_located((By.XPATH, "//*[name()='svg']/*[name()='text' and text()='Global Deaths']//following::div[1]/*[name()='svg' and @class='responsive-text-group']//*[name()='g' and @class='responsive-text-label']/*[name()='svg']/*[name()='text']"))).get_attribute("innerHTML"))
    • 使用XPATHtext屬性:

       driver.get('https://coronavirus.jhu.edu/map.html') WebDriverWait(driver, 20).until(EC.frame_to_be_available_and_switch_to_it((By.XPATH,"//iframe[@title='Coronavirus COVID-19 Global Cases by Johns Hopkins CSSE']"))) print(WebDriverWait(driver, 60).until(EC.visibility_of_element_located((By.XPATH, "//*[name()='svg']/*[name()='text' and text()='Global Deaths']//following::div[1]/*[name()='svg']//*[name()='g']/*[name()='svg']/*[name()='text']"))).text)
  • 控制台輸出:

     905,181
  • 注意:您必須添加以下導入:

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

您可以在如何使用 Selenium 檢索 WebElement 的文本 - Python 中找到相關討論


參考

您可以在以下位置找到一些相關討論:

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM