Python - AttributeError:' List'对象没有属性'点击'。硒。 (提供图片)

时间:2017-10-21 19:59:34

标签: python html css selenium selenium-webdriver

我确定有一些简单的事情我没有搞清楚,但我需要帮助。我试图在桌子的单元格中选择一个项目,但它证明是困难的。以下是来源:

  <div class="clear formrow top_border">
            <div>
<table class="infoGrid" cellspacing="0" cellpadding="0" border="0" id="ctl00_cphMain_gdvSchdRel" style="border-collapse:collapse;">
    <tr>
        <th scope="col">Program Name</th><th scope="col">
                            <img alt="Schedule Type" src="../../../../Resources/images/arrow_black_downward.gif" />
                        </th><th scope="col">Week Of</th><th scope="col">Schedule Distribution</th><th scope="col">Release Date/Time</th><th scope="col">Init Cap</th><th scope="col">CapLift Date/Time</th><th scope="col">Max Cap</th><th scope="col">&nbsp;</th>
    </tr><tr>
        <td>Disney Mainline</td><td>
                            <a id="ctl00_cphMain_gdvSchdRel_ctl02_lnkSchTyp" class="cls_arw arw_blue" href="javascript:__doPostBack('ctl00$cphMain$gdvSchdRel$ctl02$lnkSchTyp','')"></a>
                        </td><td>Oct 22, 2017</td><td>
                            <a id="ctl00_cphMain_gdvSchdRel_ctl02_lnkSchDist" class="cls_arw arw_grey" href="javascript:__doPostBack('ctl00$cphMain$gdvSchdRel$ctl02$lnkSchDist','')"></a>
                        </td><td>Oct 10, 2017 10:21 AM</td><td>15</td><td>Oct 12, 2017 03:30 PM</td><td>80</td><td>
                            <input type="hidden" name="ctl00$cphMain$gdvSchdRel$ctl02$hdnApp_Id" id="ctl00_cphMain_gdvSchdRel_ctl02_hdnApp_Id" value="138" />
                            <input type="hidden" name="ctl00$cphMain$gdvSchdRel$ctl02$hdnApp_Sch_Id" id="ctl00_cphMain_gdvSchdRel_ctl02_hdnApp_Sch_Id" value="48344" />
                            <input type="hidden" name="ctl00$cphMain$gdvSchdRel$ctl02$hdnApp_Grp_Id" id="ctl00_cphMain_gdvSchdRel_ctl02_hdnApp_Grp_Id" value="686" />
                            <input type="hidden" name="ctl00$cphMain$gdvSchdRel$ctl02$hdnWk_Strt_Date" id="ctl00_cphMain_gdvSchdRel_ctl02_hdnWk_Strt_Date" value="10/22/2017 00:00:00" />
                            <input type="hidden" name="ctl00$cphMain$gdvSchdRel$ctl02$hdnOffset" id="ctl00_cphMain_gdvSchdRel_ctl02_hdnOffset" value="-300" />
                            <input type="hidden" name="ctl00$cphMain$gdvSchdRel$ctl02$hdnPrivType" id="ctl00_cphMain_gdvSchdRel_ctl02_hdnPrivType" value="e" />
                        </td>
    </tr><tr>
        <td>Disney Mainline</td><td>
                            <a id="ctl00_cphMain_gdvSchdRel_ctl03_lnkSchTyp" class="cls_arw arw_blue" href="javascript:__doPostBack('ctl00$cphMain$gdvSchdRel$ctl03$lnkSchTyp','')"></a>
                        </td><td>Oct 29, 2017</td><td>
                            <a id="ctl00_cphMain_gdvSchdRel_ctl03_lnkSchDist" class="cls_arw arw_grey" href="javascript:__doPostBack('ctl00$cphMain$gdvSchdRel$ctl03$lnkSchDist','')"></a>
                        </td><td>Oct 17, 2017 06:00 PM</td><td>15</td><td>Oct 19, 2017 03:30 PM</td><td>80</td><td>
                            <input type="hidden" name="ctl00$cphMain$gdvSchdRel$ctl03$hdnApp_Id" id="ctl00_cphMain_gdvSchdRel_ctl03_hdnApp_Id" value="138" />
                            <input type="hidden" name="ctl00$cphMain$gdvSchdRel$ctl03$hdnApp_Sch_Id" id="ctl00_cphMain_gdvSchdRel_ctl03_hdnApp_Sch_Id" value="48471" />
                            <input type="hidden" name="ctl00$cphMain$gdvSchdRel$ctl03$hdnApp_Grp_Id" id="ctl00_cphMain_gdvSchdRel_ctl03_hdnApp_Grp_Id" value="686" />
                            <input type="hidden" name="ctl00$cphMain$gdvSchdRel$ctl03$hdnWk_Strt_Date" id="ctl00_cphMain_gdvSchdRel_ctl03_hdnWk_Strt_Date" value="10/29/2017 00:00:00" />
                            <input type="hidden" name="ctl00$cphMain$gdvSchdRel$ctl03$hdnOffset" id="ctl00_cphMain_gdvSchdRel_ctl03_hdnOffset" value="-300" />
                            <input type="hidden" name="ctl00$cphMain$gdvSchdRel$ctl03$hdnPrivType" id="ctl00_cphMain_gdvSchdRel_ctl03_hdnPrivType" value="e" />
                        </td>
    </tr>
</table>
</div>
    </div>

正如您所知,因为表格尚未关闭,所以有更多行。除了id不同之外,它们看起来完全相同。这些是我迄今为止尝试过的事情:

elem = driver.find_element_by_id("ctl00_cphMain_gdvSchdRel_ctl02_lnkSchTyp")
elem.click()

elem=driver.find_element_by_css_selector("a.cls_arw arw_blue")
elem.click()

for row in driver.find_elements_by_css_selector("a.cls_arw arw_blue"):
    cell = row in row.find_elements_by_class_name("cls_arw arw_blue")
    cell.click()

elem = driver.find_elements_by_class_name("cls_arw arw_blue")[-1]
elem.click()

我尝试的最后两件事是因为正如我所指出的那样,除了id不同之外,表中还有更多行看起来完全相同。我想总是抓住表格中的最后一个蓝色箭头,但此时我很乐意弄清楚如何点击任何蓝色箭头。您可以在源代码中看到蓝色箭头有一个href。网页上的表格图片如下。

enter image description here

第一个蓝色箭头是代码的一部分:

<td><a id="ctl00_cphMain_gdvSchdRel_ctl02_lnkSchTyp" class="cls_arw arw_blue" href="javascript:__doPostBack('ctl00$cphMain$gdvSchdRel$ctl02$lnkSchTyp','')"></a></td>

如果您需要更多信息或我需要清理一些内容,请与我们联系。

2 个答案:

答案 0 :(得分:0)

您对问题的描述不对。你的错误是:

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

因为,正如评论中所写,您试图点击列表而不是对象。

我看到你编辑了这个问题。原文是:

elem = driver.find_elements_by_id("ctl00_cphMain_gdvSchdRel_ctl02_lnkSchTyp")
elem.click()

这就是你的错误。

如果您改为:

elem = driver.find_element_by_id("ctl00_cphMain_gdvSchdRel_ctl02_lnkSchTyp")
elem.click()

您将看到错误是另一个错误。

如果你看看你的元素:

<a id="ctl00_cphMain_gdvSchdRel_ctl02_lnkSchTyp" class="cls_arw arw_blue" href="javascript:__doPostBack('ctl00$cphMain$gdvSchdRel$ctl02$lnkSchTyp','')"></a>

属性 href 包含要执行的javascript的引用。

如果要执行此操作,请尝试:

elem = driver.find_element_by_id('ctl00_cphMain_gdvSchdRel_ctl02_lnkSchTyp')
href = elem.get_attribute("href")
print(href)
#href="alert('hello world');"
driver.execute_script(href, elem)

答案 1 :(得分:0)

仔细阅读所有评论/讨论/答案我认为我们已经过度复杂化了这个问题。错误'List' Object has no attribute 'click'说明我们正在尝试在不受支持的click()对象上调用List方法。

如果您要求点击我们将使用find_elements_by_css_selector的每个链接,并在列表中进行迭代,并点击WebElement中的每个List。但是,您的要求是单击表格中的最后一个蓝色箭头,但您没有提供HTML。因此,让我们试着弄清楚如何点击第一个蓝色箭头。

  • xpath

    driver.find_element_by_xpath("//a[@class='cls_arw arw_blue'][@id,'ctl00_cphMain_gdvSchdRel_ctl02_lnkSchTyp']").click()
    
  • css_selector

    driver.find_element_by_css_selector("a.cls_arw arw_blue[id='ctl00_cphMain_gdvSchdRel_ctl02_lnkSchTyp']").click()