使用Selenium/XPath/Python抓取文本
我想计算一下这次事故的死亡人数。我想使用Selenium、Python和Selenium的chrome驱动程序来实现这一点。死亡人数可在路径使用Selenium/XPath/Python抓取文本,python,selenium,svg,xpath,webdriverwait,Python,Selenium,Svg,Xpath,Webdriverwait,我想计算一下这次事故的死亡人数。我想使用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(
/*[@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"}”.
这种情况也发生在其他我正在努力抓取的网站上
如何修复此问题?此错误的原因是什么?来自的总死亡人数(即905181的元素在
范围内,因此您必须:
- 使所需帧可用并切换到该帧
- 针对位于()的元素的可见性进行归纳,您可以使用以下任一选项:
- 使用
和XPATH
:get\u attribute()
- 使用
和文本属性:XPATH
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
参考文献 您可以在以下内容中找到一些相关讨论:
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.common.by import By
from selenium.webdriver.support import expected_conditions as EC