属性错误:';str';对象没有属性';单击';在尝试循环执行HREF并通过Selenium和Python单击它们时
。 我用来循环链接的代码是:属性错误:';str';对象没有属性';单击';在尝试循环执行HREF并通过Selenium和Python单击它们时,python,python-3.x,selenium,selenium-webdriver,webdriver,Python,Python 3.x,Selenium,Selenium Webdriver,Webdriver,。 我用来循环链接的代码是: 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=“7896348772e450d168543632013ca4e”, element=“0.
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=“7896348772e450d168543632013ca4e”,
element=“0.06572622905717385-1”)>
AttributeError:“str”对象没有“click”属性
任何人都可以帮忙。问题在于
get\u attribute()
方法返回属性的值。在本例中,属性为href
因此,它返回str
obj。请注意,web元素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列表。问题在于get\u attribute()
方法返回属性值。在本例中,属性为href
因此,它返回str
obj。请注意,web元素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列表。获取属性(“href”)返回元素指向的url字符串。如果要单击超链接元素,只需执行以下操作:
for elem in elems:
print(elem)
elem.click()
driver.back() //to go back the previous page and continue over the links
另一方面,如果要打印正在单击的超链接的URL,可以使用get\u attribute()
方法:
print(elem.get_attribute("href"))
get_属性(“href”)
返回元素指向的url字符串。如果要单击超链接元素,只需执行以下操作:
for elem in elems:
print(elem)
elem.click()
driver.back() //to go back the previous page and continue over the links
另一方面,如果要打印正在单击的超链接的URL,可以使用get\u attribute()
方法:
print(elem.get_attribute("href"))
此错误消息
AttributeError: 'str' object has no attribute 'click'
…表示脚本/程序试图调用字符串
对象上的click()
出了什么问题
根据代码行:
elem.get_attribute("href").click()
您已经从列表元素中提取了第一个元素的href属性get\u attribute()
方法返回一个字符串。字符串数据类型无法调用click()
方法。因此,您可以看到错误
解决方案
现在,当您提取href
属性并希望打开链接时,一个可行的解决方案是打开相邻选项卡中的(href)链接,如下所示:
elems = driver.find_elements_by_xpath("//a[@href]")
for elem in elems:
print(elem)
my_href = elem.get_attribute("href")
driver.execute_script("window.open('" + my_href +"');")
# perform your tasks in the new window and switch back to the parent windown for the remaining hrefs
此错误消息
AttributeError: 'str' object has no attribute 'click'
…表示脚本/程序试图调用字符串
对象上的click()
出了什么问题
根据代码行:
elem.get_attribute("href").click()
您已经从列表元素中提取了第一个元素的href属性get\u attribute()
方法返回一个字符串。字符串数据类型无法调用click()
方法。因此,您可以看到错误
解决方案
现在,当您提取href
属性并希望打开链接时,一个可行的解决方案是打开相邻选项卡中的(href)链接,如下所示:
elems = driver.find_elements_by_xpath("//a[@href]")
for elem in elems:
print(elem)
my_href = elem.get_attribute("href")
driver.execute_script("window.open('" + my_href +"');")
# perform your tasks in the new window and switch back to the parent windown for the remaining hrefs
你能分享相关的html吗?@prany你想要完整的源代码吗?@vijayMV-不是完整的源代码,而是与你的question@prany我在帖子中附上了一个链接html的图片。我在你的html中看不到任何href。你可以共享相关的html吗?@prany你想要完整的源代码吗?@vijayMV-不是完整的源代码但是与你的question@prany我在帖子中附加了一个html链接的图片。我在你的htmlGood作业中看不到任何href指出循环的问题。如果用户必须在每个链接上执行不同的操作,他将不得不再添加一些条件。@Shivam Mishra如果我想从每个链接提取一些信息,我应该在现有代码中添加哪些内容?谢谢Shivam Mishra@vijayMV check@vijayMV您希望在每个链接中测试什么?你可以在答案中使用任何方法。我想说的是,如果您使用这个答案中的方法,您必须检查驱动程序当前进入的页面,即如果link==link1,则执行test1等等。这是因为我假设您必须在不同的链接上执行不同的操作。很好地指出了循环的问题。如果用户必须在每个链接上执行不同的操作,他将不得不再添加一些条件。@Shivam Mishra如果我想从每个链接提取一些信息,我应该在现有代码中添加哪些内容?谢谢Shivam Mishra@vijayMV check@vijayMV您希望在每个链接中测试什么?你可以在答案中使用任何方法。我想说的是,如果您使用这个答案中的方法,您必须检查驱动程序当前进入的页面,即如果link==link1,则执行test1等等。那是因为我假设你必须在不同的链接上执行不同的操作。对于新的窗口技巧+1。奥普万