This is the tag containing href
。
This 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'
任何人都可以帮忙吗。
答案 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"))