Python/Selenium:如何在动态生成的表中迭代tr

Python/Selenium:如何在动态生成的表中迭代tr,python,selenium,dictionary,html-table,Python,Selenium,Dictionary,Html Table,我试图从这个网站下载表格,然后用熊猫轻松地处理数据。 问题是表是动态生成的,因此我无法轻松理解其结构或检测执行循环工作所需的“tr”。 我以前尝试过请求和BeautifulSoup,但没有成功,所以这里有人推荐Selenium,但没有告诉我更多 在Selenium上,我已经尝试了很多东西,包括XPath、css选择器等,但都没有效果。我的想法是以有序的方式提取每一行的数据,但行名似乎有一个非常奇怪的名称,包括“\n ngcontent”,我无法理解它 这是我的(不工作)代码: 我如何才能下载这些

我试图从这个网站下载表格,然后用熊猫轻松地处理数据。 问题是表是动态生成的,因此我无法轻松理解其结构或检测执行循环工作所需的“tr”。 我以前尝试过请求和BeautifulSoup,但没有成功,所以这里有人推荐Selenium,但没有告诉我更多

在Selenium上,我已经尝试了很多东西,包括XPath、css选择器等,但都没有效果。我的想法是以有序的方式提取每一行的数据,但行名似乎有一个非常奇怪的名称,包括“\n ngcontent”,我无法理解它

这是我的(不工作)代码:

我如何才能下载这些信息,并以最简单、最整洁的方式为熊猫做好准备?
谢谢

有两条指令可以处理您描述的问题:

  • 使用
    驱动程序在表中的所有行上迭代。通过\()

    我建议使用静态网页。这是更自然的,因为你实际上利用了硒的功能
  • 下载网页的HTML代码,并“脱机”解析和操作它。
    当页面不断更新时,这将更好地工作,并保证不会调用页面中的过时元素。然而,它会迫使您解析HTML代码,这从来都不是一件有趣的事情
  • 选择最适合您的,然后您可以继续处理更多的技术问题。
    祝您好运!


    编辑:注意该方法是如何调用元素s,因此不必提及元素的索引。因此,在您的情况下,您可以使用:

    row = driver.find_elements_by_xpath('/html/body/app-root/app-home/div/div/table/tbody/tr')
    
    # And not:
    row = driver.find_elements_by_xpath('/html/body/app-root/app-home/div/div/table/tbody/tr[number]')
    

    它将返回所有具有上述属性的元素(在本例中为给定的xpath)。

    您能详细说明一下
    以有序方式为每一行提取数据的确切含义吗?您正试图将哪些具体的
    手动步骤
    自动化
    ?在这一点上,我的目标只是以一种我可以用Pandas轻松可视化的方式下载数据,所以我的意思是我不想让事情过于复杂,主要是因为我也不是高级程序员。你能给我一个代码示例,说明如何“使用driver.getElements()迭代表中的所有行”吗?我不知道你的意思。我还没有进步。我想我得在支架之间放点东西,这就是我被卡住的地方。在这种情况下,在“()”之间会出现什么?我是confused@skeitel我已经编辑了我的答案。让我知道你写的代码行有多好,@GalAbra。那是丢失的那块。非常感谢你!但是,让我了解到…你是如何想出达到我们需要的tr所需的确切语法的?我在哪里可以了解到更多信息?@skeitel我很高兴听到这个消息!我已经和硒打了一段时间的交道,所以我可以向你保证,学习硒的最佳方法是练习并陷入困境;)您可以阅读更多关于
    查找\u元素\u的信息,方法是…
    或。祝你好运哦,谢谢…陷入困境似乎是我的专长…如果这是最好的学习方式,我会很好的一天…谢谢!
    row = driver.find_elements_by_xpath('/html/body/app-root/app-home/div/div/table/tbody/tr')
    
    # And not:
    row = driver.find_elements_by_xpath('/html/body/app-root/app-home/div/div/table/tbody/tr[number]')