[英]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 ,您可以使用以下任一定位器策略:
使用XPATH
和get_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"))
使用XPATH
和text属性:
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
您可以在以下位置找到一些相关讨论:
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.