Selenium / Python:错误点击一个地址是JavaScript的按钮,点击

时间:2017-11-01 02:16:08

标签: javascript python selenium onclick click

我一直试图点击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)。但是,我是硒的初学者,所以我不知道。

有什么想法吗?

4 个答案:

答案 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,如下所示:

  • 由于WebElementid

    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字符串以实际匹配页面上的内容。