如何使用 Selenium 和 Python 查找从 covid 中恢复的人数的类路径
Posted
技术标签:
【中文标题】如何使用 Selenium 和 Python 查找从 covid 中恢复的人数的类路径【英文标题】:How to find the class path for the number of recovered people from covid using Selenium and Python 【发布时间】:2021-03-29 01:30:51 【问题描述】:所以,我需要从这个网页获取文本(从 covid 中恢复的人数)到控制台,但是我找不到数字的类,有人可以帮我找到类,所以我可以打印数字进入控制台。我需要使用 PhantomJS 因为我不想在运行代码时打开日志。
from selenium import webdriver
driver = webdriver.PhantomJS()
driver.get('https://www.tvnet.lv/covid19Live')
text = driver.find_element_by_class_name("covid-summary__count covid-c-recovered")
print(text)
【问题讨论】:
【参考方案1】:根据selenium.webdriver.common.by 实现的文档:
class selenium.webdriver.common.by.By
Set of supported locator strategies.
CLASS_NAME = 'class name'
因此,使用 find_element_by_class_name()
您将无法传递多个类名,因为它接受一个类。
解决方案
要打印HEALED的人数,您可以使用以下任一Locator Strategies:
拉特维耶:
print(driver.find_element_by_xpath("//h1[contains(., 'COVID-19 LATVIJĀ')]//following::ul[1]//p[@class='covid-summary__count covid-c-recovered']").text)
帕索:
print(driver.find_element_by_xpath("//h1[contains(., 'COVID-19 PASAULĒ')]//following::ul[1]//p[@class='covid-summary__count covid-c-recovered']").text)
理想情况下,您需要为visibility_of_element_located()
诱导WebDriverWait,您可以使用以下任一Locator Strategies:
拉特维耶:
driver.get("https://www.tvnet.lv/covid19Live")
print(WebDriverWait(driver, 20).until(EC.visibility_of_element_located((By.XPATH, "//h1[contains(., 'COVID-19 LATVIJĀ')]//following::ul[1]//p[@class='covid-summary__count covid-c-recovered']"))).text)
帕索:
driver.get("https://www.tvnet.lv/covid19Live")
print(WebDriverWait(driver, 20).until(EC.visibility_of_element_located((By.XPATH, "//h1[contains(., 'COVID-19 PASAULĒ')]//following::ul[1]//p[@class='covid-summary__count covid-c-recovered']"))).text)
注意:您必须添加以下导入:
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.common.by import By
from selenium.webdriver.support import expected_conditions as EC
控制台输出:
19 072
52 546 925
您可以在How to retrieve the text of a WebElement using Selenium - Python找到相关讨论
参考文献
您可以在以下位置找到一些相关的详细讨论:
Invalid selector: Compound class names not permitted error using Selenium How to locate an element with multiple class names?【讨论】:
它仍然给我同样的错误(selenium.common.exceptions.TimeoutException: Message: Screenshot: available via screen) 它给了我一个错误:(selenium.common.exceptions.TimeoutException: Message: Screenshot: available via screen) @Lagis_YTYT 有一个小错误,已更正。请重新测试。【参考方案2】:find_element_by_class_name()
需要一个 单个类 作为参数,但您提供了两个类名(类是一个 “多值属性”,多个值由一个空格)。
检查单个类:
driver.find_element_by_class_name("covid-c-recovered")
或者,切换到 CSS 选择器:
driver.find_element_by_css_selector(".covid-summary__count.covid-c-recovered")
深入挖掘
让我们看看source code。当通过类名搜索元素时,Python selenium 实际上在底层构造了一个 CSS 选择器:
elif by == By.CLASS_NAME:
by = By.CSS_SELECTOR
value = ".%s" % value
这意味着当您使用 covid-summary__count covid-c-recovered
作为类名值时,用于查找元素的实际 CSS 选择器恰好是:
.covid-summary__count covid-c-recovered
可以理解的是它不匹配任何元素(covid-c-recovered
将被视为此处的标签名称)。
【讨论】:
它给了我一个错误:屏幕截图:可通过屏幕获得【参考方案3】:如果你想要数字,请确保类名之间有圆点。
driver.get('https://www.tvnet.lv/covid19Live')
element = driver.find_element_by_class_name("covid-summary__count.covid-c-recovered")
print(element.text)
输出
19 072
【讨论】:
它给了我一个错误:屏幕截图:可通过屏幕获得以上是关于如何使用 Selenium 和 Python 查找从 covid 中恢复的人数的类路径的主要内容,如果未能解决你的问题,请参考以下文章
如何使用 Selenium 和 Python 查找从 covid 中恢复的人数的类路径
Selenium web 自动化使用 python:如何使用 selenium 处理表以通过匹配文本来查找特定行并删除该行
如何使用python在selenium中通过其id名称的一部分查找元素
如何使用 selenium python 查找包含特定字符串的所有按钮?