我一直试图点击href =“javascript:;”在使用selenium和python的页面上。
相关的HTML代码是:
<tr>
<td class="Sun out">24</td>
<td class=" out">25</td>
<td class=" out">26</td>
<td class=" out">27</td>
<td class=" out">28</td>
<td id="CellPlayDate0" class=" able"><a href="javascript:;" onclick="fnSelectPlayDate(0, '20171229')">29</a></td>
<td id="CellPlayDate1" class=" able"><a href="javascript:;" onclick="fnSelectPlayDate(1, '20171230')">30</a></td>
</tr>
对于代码,我有:
browser.find_elements_by_xpath('//*[@id="CellPlayDate0"]').click()
相应的错误消息是:
AttributeError: 'list' object has no attribute 'click'
我认为元素是列表,所以我尝试了如下
browser.find_elements_by_xpath('//td[@id="CellPlayDate1"]')[0].click()
然而,另一个错误
IndexError: list index out of range
我认为还有另一种方法可以点击按钮(javascript,onclick)。但是,我是硒的初学者,所以我不知道。
有什么想法吗?
答案 0 :(得分:1)
似乎browser.find_elements_by_xpath('//*[@id="CellPlayDate0"]')
会返回list
个元素。
您需要选择一个元素并创建点击事件可能就像
browser.find_elements_by_xpath('//*[@id="CellPlayDate0"]')[0].click()
答案 1 :(得分:0)
错误说明了一切:
AttributeError: 'list' object has no attribute 'click'
根据您的代码块,您有:
browser.find_elements_by_xpath('//*[@id="CellPlayDate0"]').click()
而不是WebElement
会返回List
。因此,当您尝试点击List
时,您会将错误视为AttributeError: 'list' object has no attribute 'click'
解决方案是将方法find_elements_by_xpath
更改为find_element_by_id
或构建唯一的xpath
,如下所示:
由于WebElement
有id
:
browser.find_elements_by_id("CellPlayDate0').click()
构建xpath
:
browser.find_elements_by_xpath("//td[@id='CellPlayDate0']").click()
答案 2 :(得分:0)
此处存在的问题是,您在click()
列表中调用了<td>
,而不是实际拥有您想要的点击的<a>
锚点。试试这个:
browser.find_element_by_xpath('//*[@id="CellPlayDate0"]/a').click()
请注意使用find_element_by_xpath
代替find_element[s]_by_xpath
?或者用css:
browser.find_element_by_css_selector('#CellPlayDate0 a').click()
答案 3 :(得分:0)
你有两个问题。
首先,xpath表达式返回一个列表,正如其他答案所指出的那样。 Python列表没有click方法,返回的元素可以。
其次,你的xpath表达式实际上并没有找到任何东西。它返回一个没有匹配的空列表,这就是为什么你的索引超出范围错误。
你可能想要的是:
for elem in browser.find_elements_by_xpath('//*[@id="CellPlayDate0"]'):
elem.click()
请注意,您仍然需要调整xpath字符串以实际匹配页面上的内容。