AttributeError:“ str”对象在尝试遍历href并通过Selenium和Python单击它们时没有属性“ click”

时间:2018-06-27 06:49:30

标签: python python-3.x selenium selenium-webdriver webdriver

This is the tag containing hrefThis is the HTML of one of the links when I inspected it

我用来循环链接的代码是:

elems = driver.find_elements_by_xpath("//a[@href]")
for elem in elems:
    print(elem)
    elem.get_attribute("href").click()

但是我得到了错误:

  

中的文件“ C:/Users/user/Desktop/sel.py”,第31行      

     

(session =“ 7896348772e450d1658543632013ca4e”,   element =“ 0.06572622905717385-1”)>

elem.get_attribute("href").click()
     

AttributeError:'str'对象没有属性'click'

任何人都可以帮忙吗。

3 个答案:

答案 0 :(得分:3)

此错误消息...

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

...表示您的脚本/程序已尝试在click()对象上调用string

出了什么问题

按照代码行:

elem.get_attribute("href").click()

您已从 List 元素中提取了第一个元素的 href 属性。 get_attribute()方法返回字符串 String 数据类型不能调用click()方法。因此,您会看到错误。

解决方案

现在,在提取href属性并且要打开 Links 时,在所有可能的情况下,可行的解决方案是打开相邻{ {1}}如下:

TABs

答案 1 :(得分:0)

问题是get_attribute()方法返回属性的值。在这种情况下,属性为href,因此返回了str obj。请注意,Web元素elem是可单击的。但是,如果您单击elem。它将带您进入下一页,因此无法遍历所有这些Web元素(elems),因为驱动程序将继续下一页!

另一种实现您想要的方法是创建一个链接列表,然后像下面这样遍历它:

links = []   
elems = driver.find_elements_by_xpath("//a[@href]")
for elem in elems:
    print(elem)
    links.append(elem.get_attribute("href"))

for link in links:
    driver.get(link)
    # do you stuff

通过这种方式,我们确保通过迭代从Web元素列表(即elems)中收集所有链接。收集所有链接并将它们存储在列表中之后,我们将对所收集的url列表进行迭代。

答案 2 :(得分:0)

get_attribute("href")返回元素所指向的URL的STRING。如果要单击超链接元素,请执行以下操作:

for elem in elems:
    print(elem)
    elem.click()
    driver.back() //to go back the previous page and continue over the links

在旁注中,如果要打印单击的超链接的URL,可以使用get_attribute()方法:

print(elem.get_attribute("href"))