AttributeError: у объекта 'str' нет атрибута 'click' при попытке перебрать hrefs и щелкнуть их через Selenium и Python - PullRequest
0 голосов
/ 27 июня 2018

Это тег, содержащий href. Это HTML-код одной из ссылок, когда я его проверял .

Код, который я использовал для циклического перемещения по ссылкам:

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, в

(сессия = "7896348772e450d1658543632013ca4e", элемент = "0.06572622905717385-1")>

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

AttributeError: у объекта 'str' нет атрибута 'click'

Может ли кто-нибудь помочь, пожалуйста.

Ответы [ 3 ]

0 голосов
/ 27 июня 2018

get_attribute("href") возвращает STRING URL, на который указывает элемент. Если вы хотите нажать на элемент гиперссылки, просто выполните:

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"))
0 голосов
/ 27 июня 2018

Это сообщение об ошибке ...

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

... подразумевает, что ваш скрипт / программа попытались вызвать click() для string объекта.

Что пошло не так

Согласно строке кода:

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

Вы извлекли атрибут href первого элемента из списка elems . get_attribute() метод возвращает строку . String типы данных не могут вызывать click() метод. Отсюда вы видите ошибку.

Решение

Теперь, во всех случаях, когда вы извлекаете атрибуты href и хотите открыть Links , жизнеспособным решением будет открыть (href) ссылки в соседнем TABs как следующим образом:

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
0 голосов
/ 27 июня 2018

Проблема в том, что метод get_attribute() возвращает значение атрибута. В этом случае атрибут href, поэтому он возвращает str obj. Обратите внимание, что веб-элемент elem кликабелен. Но, если вы нажмете на elem. Таким образом, вы перейдете на следующую страницу, поэтому перебирать все эти веб-элементы (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

Таким образом, мы собираем все ссылки из списка веб-элементов, т.е. elems, перебирая его. После сбора всех ссылок и сохранения их в списке мы перебираем собранный список URL.

...