Я пытаюсь использовать модуль Pythons Selenium, чтобы щелкнуть элемент, ссылка которого имеет текст «xlsx» в конце. Ниже приведен код, который я использую, и подробные сведения об элементе. Может кто-нибудь понять, почему Python не может найти этот элемент?
driver.find_element_by_partial_link_text('xlsx').click()Вот детали элемента:
<a name = "URL$2" id = "URL$2" ptlinktgt = "pt_new" tabindex = "43" onfocus = "doFocus_win0(this,false,true);" href = "http:******/HSC8_CNTRCT_ITEMS_IMPRVD-1479218.xlsx" onclick = "window.open('http:********/HSC8_CNTRCT_ITEMS_IMPRVD-1479218.xlsx','','');cancelBubble(event);return false;" class = "PSHYPERLINK">HSC8_CNTRCT_ITEMS_IMPRVD-1479218.xlsx</a>Мне пришлось удалить некоторые части URL-адреса в целях конфиденциальности, однако это не должно повлиять на ответ на вопрос.
Спасибо.
Вот что он говорит: нет такого элемента: невозможно найти элемент. Кроме того, я не уверен, как проверить, является ли это ссылкой внутри iframe, но у меня есть сильное чувство, что это так.
Привет, благодаря вашему вопросу / комментарию я обнаружил, что элемент не удалось найти, потому что мне пришлось переключиться на фрейм. Так что это сработало, когда я добавил следующее перед используемым мной кодом: driver.switch_to.frame ('ptModFrame_0')
Как дела? Вы попробовали мой ответ?
Привет, да, я сделал, и это не сработало. Оказалось, что здесь задействован фрейм, поэтому мне сначала пришлось использовать swith_to.frame.






Вы можете использовать селектор CSS:
driver.find_element_by_css_selector("a[href*='xlsx']")
Если элемент по-прежнему не может быть обнаружен, я бы предложил использовать оператор ожидания, чтобы убедиться, что элемент виден, прежде чем вы начнете с ним взаимодействовать.
Отличный ответ, Ларри, я бы также добавил, что (XPath) работает так же, как селектор CSS .find_element_by_xpath("//*[contains(text(),'ABC')]")
Вы можете получить его по имени класса (имя класса = PSHYPERLINK).
Это должно работать:
import selenium
from selenium import webdriver
from selenium.webdriver.common.keys import Keys
import time
url = ''
driver = webdriver.Chrome('/path/to/chromedriver/executable')
if __name__=='__main__':
driver.get(url)
time.sleep(3)
driver.find_element_by_class_name('PSHYPERLINK').click()
При нахождении атрибута убедитесь, что используете единственный "элемент". Нравиться:
driver.find_element_by_class_name('PSHYPERLINK').click()
нет:
driver.find_elements_by_class_name('PSHYPERLINK').click()
Надеюсь это поможет.
Пожалуйста, попробуй:
driver.find_element_by_xpath(".//a[contains(@href,'xlsx')]").
Спасибо за ответы. Оказывается, как упомянул @Andersson, окно было в другом фрейме.
Я решил проблему, используя следующий код перед find_element: driver.switch_to.frame ('ptModFrame_0').
NoSuchElementException? Проверьте, находится ли ссылка внутриiframe