我确定有一些简单的事情我没有搞清楚,但我需要帮助。我试图在桌子的单元格中选择一个项目,但它证明是困难的。以下是来源:
<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"> </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。网页上的表格图片如下。
第一个蓝色箭头是代码的一部分:
<td><a id="ctl00_cphMain_gdvSchdRel_ctl02_lnkSchTyp" class="cls_arw arw_blue" href="javascript:__doPostBack('ctl00$cphMain$gdvSchdRel$ctl02$lnkSchTyp','')"></a></td>
如果您需要更多信息或我需要清理一些内容,请与我们联系。
答案 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()