【问题标题】:Selenium Python find element by xpath returns empty listSelenium Python 通过 xpath 查找元素返回空列表
【发布时间】:2021-06-23 06:17:07
【问题描述】:

我正在尝试使用 Firefox 从受密码保护的网站上抓取表格,在我可以访问表格之前,我需要选择产品,填写起始日期和结束日期并滑动以进行验证。我只想抓取每日价格。

我尝试了以下代码,但它返回一个空列表:

enter code here
driver = webdriver.Firefox(firefox_profile=profile)              
number_elements = driver.find_elements_by_xpath("//td[contains(text(), 'N')]")
for number_element in number_elements:
    print(number_element.text)

下面的代码也返回一个空列表

driver.find_elements_by_xpath(".//div[@class='tabTypeNav']")

我尝试了下面的代码,但它会刮掉页面上的所有其他表格,希望找到我正在寻找的表格。

for tr in driver.find_elements_by_tag_name("tr"):
    for td in tr.find_elements_by_tag_name("td"):
        print(td.get_attribute("innerText"))

更新,我设法刮掉了表格中的元素!!

表格内容包含在 iframe 中,所以我使用了:

driver.switch_to.frame(0)
table = driver.find_element_by_xpath("//body/div[@class='tabBox']/div[@class='tabCont']/div[1]/div[1]/table[1]")
table.get_attribute("textContent")

【问题讨论】:

  • number_element.get_attibute('textContent') 试试看
  • @ArundeepChohan 谢谢,我已经尝试过了,但它返回了错误文件“”,第 1 行,在 number_elements.get_attribute('textContent') AttributeError:“列表”对象没有属性“get_attribute”
  • 需要验证哪些列?
  • 嗨@vitaliis 我想要表格中的所有内容、产品、日期和价格
  • 检查我的答案。一般来说应该工作。如果没有,请使用定位器。例如,尝试将 td:nth-of-type(2) 更改为 td:nth-of-type(3) 以检查所需的答案。

标签: python html selenium web-scraping


【解决方案1】:

我将从定义开始: <tr> 标签定义 HTML 表格中的一行。

<td> 标记定义 HTML 表格中的标准数据单元格。

<th> 标记定义 HTML 表格中的标题单元格。您可能不需要验证其文本。

首先,找到所有表格行(我使定位器更精确):

rows = driver.find_elements_by_css_selector(".tabTypeCont:nth-of-type(2)>table>tbody tr")

如果您需要第一个表,请使用:

.tabTypeCont:nth-of-type(1)>table>tbody

其次,查找行文本:

for row in rows:
    value_one = row.find_element_by_css_selector("td:nth-of-type(2)").text
    value_two = row.find_element_by_css_selector("td:nth-of-type(3)").text

...

然后您可以将它们列在一个列表中,或者分别验证它们。

【讨论】:

  • 感谢您的帮助。我已经尝试过代码,但 rows 是一个空列表,我正在使用 spyder 并且 value_one 和 value_two 没有出现在变量资源管理器中。
  • 用于调试,在获取行之前临时添加 time.sleep(5)。
  • 谢谢,我试过它仍然返回同样的东西,我也在表格完全加载后尝试过。
  • .tabTypeCont>table>tbody - 检查此定位器是否唯一。
  • 啊不 tabTypeCont 不是唯一的。我再次附上了一张表格的图片,表格上方有三个按钮,每周和每月也显示表格,因此定位器 tabTypeCont 对它们来说也是相同的。
猜你喜欢
  • 1970-01-01
  • 2016-03-12
  • 1970-01-01
  • 2020-11-29
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-08-28
  • 2016-10-31
相关资源
最近更新 更多