当前位置: 首页 > 面试题库 >

AttributeError:使用Selenium和Python,“列表”对象没有属性“点击”

梁丘佑运
2023-03-14
问题内容

我想在默认设置为“季度”的页面上单击“年度”按钮。有两个基本上相同的链接,除了一个链接,data- ptype="Annual"所以我试图复制xpath来单击按钮(也尝试了其他选项,但没有一个起作用)。

但是,我得到了AttributeError: 'list' object has no attribute 'click'。我读了很多类似的文章,但无法解决我的问题..因此,我认为必须调用/单击/执行javascript事件以某种方式不同。

from selenium import webdriver
link = 'https://www.investing.com/equities/apple-computer-inc-balance-sheet'

driver = webdriver.Firefox()
driver.get(link)
elm = driver.find_elements_by_xpath("/html/body/div[5]/section/div[8]/div[1]/a[1]").click()

html如下:

<a class="newBtn toggleButton LightGray" href="javascript:void(0);" data-type="rf-type-button" data-ptype="Annual" data-pid="6408" data-rtype="BAL">..</a>

问题答案:

我仍然建议您通过 XPATH* 使用 linkText 。原因xpath:是绝对的,如果 从HTML中 添加
删除了 另一个div ,则可能会失败。而更改链接文本的机会非常小。


/html/body/div[5]/section/div[8]/div[1]/a[1] *****

因此,代替此 代码

elm = driver.find_elements_by_xpath("/html/body/div[5]/section/div[8]/div[1]/a[1]").click()

试试这个代码:

annual_link = driver.find_element_by_link_text('Annual')
annual_link.click()

是的@Druta是正确的,find_element用于一个Web元素和Web元素find_elements列表。拥有总是很好explicitwait

创建显式等待的实例,如下所示:

wait = WebDriverWait(driver,20)

并使用如下的等待引用:

wait.until(EC.elementToBeClickable(By.LINK_TEXT, 'Annual'))

更新:

from selenium import webdriver
link = 'https://www.investing.com/equities/apple-computer-inc-balance-sheet'

driver = webdriver.Firefox()
driver.maximize_window()
wait = WebDriverWait(driver,40)
driver.get(link)

driver.execute_script("window.scrollTo(0, 200)")

wait.until(EC.element_to_be_clickable((By.LINK_TEXT, 'Annual')))
annual_link = driver.find_element_by_link_text('Annual')
annual_link.click()
print(annual_link.text)

确保导入这些:

from selenium.webdriver.common.keys import Keys
from selenium.webdriver.common.by import By
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC


 类似资料:
  • 问题内容: 我想在默认设置为“季度”的页面上单击“年度”按钮。有两个基本上相同的链接,除了一个链接,所以我试图复制xpath来单击按钮(也尝试了其他选项,但没有一个起作用)。 但是,我得到了。我读了很多类似的文章,但无法解决我的问题..因此,我认为必须调用/单击/执行javascript事件以某种方式不同。 html如下: 问题答案: 我仍然建议您通过 XPATH* 使用 linkText 。原因

  • 我正试图从一个网站上搜集一些营养数据,到目前为止一切似乎都进行得很顺利,直到我遇到格式略有不同的页面。 使用selenium和这样的一行,返回一个空列表: 打印将返回以下内容: 但是,如果我定义出元素位置,那么它就可以正常工作: 我遇到的问题是,当我迭代时,页面之间的元素不相同。因此,如果div在位置9不存在,那么就会抛出一个错误。 现在,当我返回并尝试编辑我的代码来执行< code>try/ca

  • 问题内容: 我正在尝试使用python在Selenium Webdriver中使用click命令。但是我收到以下错误。有人能帮我吗? 这是我的程序 我想我缺少了一些东西。请建议我 问题答案: 感谢您的帮助。我为自己找到了答案。“ Dan Niero”给出的想法 问题是,我使用而不是。因此,s会有所作为。实际上,我正在遵循Eclipse :(。显然返回列表,因此如果我发送click事件,它将无法理解

  • 有人能帮我吗,我一直在试着运行下面的脚本 但却发生了这样的错误 下面是完整的脚本

  • 问题内容: 我正在使用python 3.3.3。我正在从tutorialspoint.com做本教程。我无法理解此错误是什么。 这是我的代码: 错误: 问题答案: 您在这里遇到问题有两个原因。第一个是您以只写模式创建的。您需要一个可以读写的文件对象。您还可以使用关键字在完成处理后自动销毁文件对象,而不必担心手动关闭它: 第二个是(就像您非常强烈地指出的错误一样)文件对象(文本文件对象)没有方法。您

  • 问题内容: 我收到一个错误 尝试写入文件时。它是关于编写有关学生分数,他们的姓名,姓氏,班级名称的文件(只需输入班级为),以记录有多少个分数及其分数。仅将其最近的3个分数保存在文件中。我不明白这是什么意思。 这是代码 问题答案: 您的附加代码混合在一起了。该方法在对象上: 请注意,我还将呼叫 移出 了循环。 您不需要在那里使用循环;如果要列出所有行,只需执行以下操作: 要处理文件关闭,请将文件对象