Python Selenium在抓取网页后返回空元素

Python Selenium在抓取网页后返回空元素,python,selenium,Python,Selenium,我正在尝试使用selenium来选择年份的下拉菜单 菜单是li元素,我需要li元素的li内容或数据值属性的排名日期 当我运行下面的代码时 import requests from selenium import webdriver from selenium.webdriver.common.keys import Keys from selenium.webdriver.common.by import By from selenium.webdriver.support.ui import

我正在尝试使用selenium来选择年份的下拉菜单

菜单是li元素,我需要li元素的li内容或数据值属性的排名日期

当我运行下面的代码时

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

url ="https://www.atptour.com/en/rankings/singles"
driver = webdriver.Chrome('/Users/snvplayer/Downloads/chromedriver')
# driver = webdriver.Chrome()

driver.implicitly_wait(30)
driver.get(url)
# result = driver.find_element_by_id('header')
result = driver.find_element_by_css_selector('ul.dropdown li')
print(result.text)
print(type(result))
我还试图单击菜单,使菜单列表可见并等待,但它返回空元素

driver.find_element_by_css_selector("div.dropdown-label").click()
driver.implicitly_wait(10)
result = driver.find_element_by_css_selector("ul.dropdown li")
# result = driver.find_element_by_css_selector("ul.dropdown").click()
print(result[0].text)
print(type(result))
有人能解释一下我怎么能刮到这一页吗?

您需要获得
innerText
属性,如果需要,还需要修剪空白

这应该可以做到:

url ="https://www.atptour.com/en/rankings/singles"
driver.get(url)
wait = WebDriverWait(driver, 10)
# wait for the date range element to be present on the page
# just to make sure that we're not trying to get the child elements before the parent element is actually present
data_range = wait.until(EC.presence_of_element_located((By.CSS_SELECTOR, '[data-value="rankDate"]')))
list_items = data_range.find_elements_by_tag_name('li')
for res in list_items:
    date_value = str(res.get_attribute('innerText')).strip()
    print(date_value)
.text
属性获取
属性。 但是由于
li
标记没有
value
属性,因此它将返回一个空字符串(您看到的行为)

请注意,在
li
标记上添加非标准的
value
属性将意味着页面无效。这就是
数据值
属性的用途


另一方面,
innerText
返回一个元素及其所有子元素包含的所有文本。

通过“it returns empty element”,您的意思是抛出一个错误,说找不到它,还是说文本为空?打印报表的结果是什么?另外,您选择的第一个元素有display:none,可能它起了作用。非常感谢!你能解释一下这是怎么回事吗?是不是因为这些元素是通过javascript加载的,我们必须等到加载完成才可以加载?@user3562812更新了答案,提供了更多细节(作为对代码的注释,尽管这在您的案例中不是问题所在),解释了为什么
.text
在这种情况下不起作用。非常感谢您,我非常感谢您的帮助。这是由于锂元素的特殊性质造成的。我必须记住这一点。有很多东西要学。