在selenium(python)中单击链接时在表的行中循环

2024-05-15 09:32:43 发布

您现在位置:Python中文网/ 问答频道 /正文

示例页面源代码如下所示

<div class='div1'>
  <table class="foot-market">
    <tbody data-live="false">
      <td class='today-name'/>
    </tbody>
    <tbody data-live="false">
      <td class='today-name'/>
    </tbody>
    <tbody data-live="false">
      <td class='today-name'/>
    </tbody>
  </table

  <table class="foot-market">
    <tbody data-live="false">
      <td class='today-name'/>
    </tbody>
    <tbody data-live="false">
      <td class='today-name'/>
    </tbody>
    <tbody data-live="false">
      <td class='today-name'/>
    </tbody>
  </table
</div>

说明 你好, 所以我们开始吧。 如上所示,我正在交互的代码片段位于<div class='div1'>中。 <td class='today-name'>是可单击的,一旦单击,它将呈现一个页面(感兴趣的页面

所以我想循环获取每个<tbody data-live="false">并单击它。在

从我的研究中,我没有发现任何类似的东西,但我发现了有趣的东西,但没有任何帮助。我感谢所有的帮助。在

谢谢。在

我的代码

^{pr2}$

错误

返回的错误在第行:

for row in table.find_element_by_xpath("//td[@data-live='false']"):

例外情况

AttributeError: 'list' object has no attribute 'find_element_by_xpath'

这是有道理的,但我要如何做到这一点。。。在


Tags: 代码namedivlivefalsedatatodaytable
1条回答
网友
1楼 · 发布于 2024-05-15 09:32:43

你看到的错误说明了一切:

for row in table.find_element_by_xpath("//td[@data-live='false']"): AttributeError: 'list' object has no attribute 'find_element_by_xpath'

下面这一行容易出错:

^{pr2}$

根据您的前一行:

table = driver.find_elements_by_xpath("//table[@class='foot-market']")

table是一个列表,您不能在列表上调用find_element_by_xpath()find_element_by_xpath()可以在webdriver实例或webelement上调用。在

您的工作代码如下:

all_tds = driver.find_elements_by_xpath("//table[@class='foot-market']//td[@class='today-name']")
for tds in all_tds :
    tds.click()
    #try for one row first and break out
    break

Note : This is a basic solution to overcome your error AttributeError: 'list' object has no attribute 'find_element_by_xpath' and to try for one row first


更新

如果您打算遍历表的所有td元素,那么您必须捕获基本url,这样我们就可以返回到主页面查找,然后单击后续元素,如下所示:

base_url = driver.current_url
count_all_tds = len(driver.find_elements_by_xpath("//table[@class='foot-market']//td[@class='today-name']"))
for td in range(count_all_tds):
    driver.find_elements_by_xpath("//table[@class='foot-market']//td[@class='today-name']")[td].click()
    # code block for other required actions and finally redirect to base_url
    driver.get(base_url)

相关问题 更多 >