Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/macos/10.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
属性错误:';str';对象没有属性';单击';在尝试循环执行HREF并通过Selenium和Python单击它们时_Python_Python 3.x_Selenium_Selenium Webdriver_Webdriver - Fatal编程技术网

属性错误:';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。奥普万