Python selenium can';无法定位元素,因为它不在源代码中

Python selenium can';无法定位元素,因为它不在源代码中,python,selenium,Python,Selenium,我正在尝试从中获取日历中突出显示的日期 我可以在chrome inspector中看到“calendar day”类,但它没有显示在源代码中。 我还试图找到其他类元素,如“月-周”,但失败了。有人能帮我诊断出是什么问题吗?我已经研究过阴影区,但它似乎不是这里的问题(尽管我可能错了) 此外,我还试图获取url“/web/20110430/area51.stackexchange.com”,但不知道如何按类、标记名、css或Xpath进行定位 driver = webdriver.Firefox()

我正在尝试从中获取日历中突出显示的日期

我可以在chrome inspector中看到“calendar day”类,但它没有显示在源代码中。 我还试图找到其他类元素,如“月-周”,但失败了。有人能帮我诊断出是什么问题吗?我已经研究过阴影区,但它似乎不是这里的问题(尽管我可能错了)

此外,我还试图获取url“/web/20110430/area51.stackexchange.com”,但不知道如何按类、标记名、css或Xpath进行定位

driver = webdriver.Firefox()
driver.get("https://web.archive.org/web/20110101000000*/area51.stackexchange.com")
element=driver.find_element_by_class_name("calendar-day")

提前谢谢

只需等待日历的div元素出现并打印即可。您的类名有一个额外的空间,并且在页面加载后需要一些时间

element=WebDriverWait(driver, 20).until(EC.presence_of_element_located((By.XPATH, "//div[contains(@class,'calendar-day')]")))
print(element.text)
产出11

elements=WebDriverWait(driver, 20).until(EC.visibility_of_all_elements_located((By.XPATH, "//div[contains(@class,'calendar-day')]")))
for element in elements:
    print(element.text)
输出 11 30 7. 16 18 10 11 7. 十二,

进口

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

只需等待日历的div元素出现并打印它。您的类名有一个额外的空间,并且在页面加载后需要一些时间

element=WebDriverWait(driver, 20).until(EC.presence_of_element_located((By.XPATH, "//div[contains(@class,'calendar-day')]")))
print(element.text)
产出11

elements=WebDriverWait(driver, 20).until(EC.visibility_of_all_elements_located((By.XPATH, "//div[contains(@class,'calendar-day')]")))
for element in elements:
    print(element.text)
输出 11 30 7. 16 18 10 11 7. 十二,

进口

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

您正在使用的页面需要一段时间才能加载,因此在提取之前引入一些显式等待会更好

示例脚本可以是:

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

driver = webdriver.Firefox()
driver.get("https://web.archive.org/web/20110101000000*/area51.stackexchange.com")
wait = WebDriverWait(driver, 10)
element = wait.until(EC.presence_of_element_located((By.CLASS_NAME, "calendar-day ")))
print(element.text)

driver.quit()
要提取多个元素,只需添加/更改
WebDriverWait(driver,20)。直到(EC.presence\u所有元素的位置((By.CLASS\u NAME,“日历日”))

因此,可以更新示例脚本

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

driver = webdriver.Firefox()
driver.get("https://web.archive.org/web/20110101000000*/area51.stackexchange.com")
wait = WebDriverWait(driver, 10)
element = wait.(driver,20).until(EC.presence_of_all_elements_located((By.CLASS_NAME, "calendar-day ")))`

for el in element:
    print(el.text)
    
driver.quit()

您正在使用的页面需要一段时间才能加载,因此在提取之前引入一些显式等待会更好

示例脚本可以是:

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

driver = webdriver.Firefox()
driver.get("https://web.archive.org/web/20110101000000*/area51.stackexchange.com")
wait = WebDriverWait(driver, 10)
element = wait.until(EC.presence_of_element_located((By.CLASS_NAME, "calendar-day ")))
print(element.text)

driver.quit()
要提取多个元素,只需添加/更改
WebDriverWait(driver,20)。直到(EC.presence\u所有元素的位置((By.CLASS\u NAME,“日历日”))

因此,可以更新示例脚本

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

driver = webdriver.Firefox()
driver.get("https://web.archive.org/web/20110101000000*/area51.stackexchange.com")
wait = WebDriverWait(driver, 10)
element = wait.(driver,20).until(EC.presence_of_all_elements_located((By.CLASS_NAME, "calendar-day ")))`

for el in element:
    print(el.text)
    
driver.quit()

您的代码缺少“.而且类名的末尾有一个空格。@arundeepchohan,谢谢,修复了这些问题。您的代码缺少“.而且类名的末尾有一个空格。@arundeepchohan,谢谢,修复了这些问题。谢谢!等待工作。但是,它只返回第一个事件,即11。类名“日历日”下有多个案例。在等待捕获所有案例之后,我还尝试通过类名称查找元素。你知道如何捕捉所有的案例吗?让我知道我是否应该发布一个关于这个的新问题。谢谢!等待工作。但是,它只返回第一个事件,即11。类名“日历日”下有多个案例。在等待捕获所有案例之后,我还尝试通过类名称查找元素。你知道如何捕捉所有的案例吗?让我知道我是否应该发布一个关于这个的新问题。谢谢!等待工作。输出11是类名“calendar day”下的第一个事件。在等待之后,我还尝试通过类名称查找元素,但只找到第一个。你知道如何捕捉所有的案例吗?让我知道我是否应该发布一个关于这个的新问题。勾选我的问题为正确。还添加了抓取倍数。谢谢!等待工作。输出11是类名“calendar day”下的第一个事件。在等待之后,我还尝试通过类名称查找元素,但只找到第一个。你知道如何捕捉所有的案例吗?让我知道我是否应该发布一个关于这个的新问题。勾选我的问题为正确。还添加了抓取倍数。