Python Selenium — как переходить по динамическим ссылкам на страницы href

#python #api #selenium #automation #selenium-webdriver-python

Вопрос:

Я автоматизирую процесс, используя selenium с python. Но я кое в чем застрял. Я должен перейти по ссылке, используя selenium. Эта ссылка является href, и она будет создаваться динамически каждый раз. Ссылка href будет примерно 3. Для другой страницы это будет 66

Теперь, чтобы имитировать щелчок по этой ссылке, есть ли какой-нибудь способ щелкнуть по ней? Как получить динамически сгенерированную ссылку? Я использую код python для selenium webdriver.

Пример пробовал « self.driver.find_element(By.CSS_SELECTOR, "create_job_listing_ajax > div:nth-child(4) > div > div > div:nth-child(2) > center > a").click() //скопированный URL-адрес как xpath

Комментарии:

1. Поделитесь URL-адресом, если это возможно, или HTML, кодом, который вы пробовали, и ошибкой.

2. пожалуйста, предоставьте ссылку на веб-сайт.

3. Наш API находится в стадии разработки и еще не запущен. мы запускаем сценарий selenium в локальной среде. Я поделюсь HTML-кодом для справки,<класс центра=»center_tag»> <класс центра=»center_tag»><стиль = «цвет: #3064f5!важно» id=»xyz_match» href=»/задания/xyz_match/116/»>1<стиль=»цвет: #3064f5!важно» id=»xyz_match» href=»/задания/xyz_match/116/»></a></a><Соответствие xyz <br> < / центр >

4. Попробовал код: self.driver.find_element_by_xpath(«//*[содержит(@href,’совпадение xyz’)]»).нажмите() и ошибка «2021-09-07 10:38:06,089 Сообщение: нет такого элемента: Не удается найти элемент: {«метод»:»xpath»,»селектор»:»//*[содержит(@href,’совпадение xyz’)]»} »

5. В соответствии с используемым вами селектором CSS, похоже a , что он находится в пределах нескольких div тегов. Попробуйте отследить a метку с помощью этого. Что-то вроде этого xpath //div[...]//a

Ответ №1:

вы написали очень сложно, сделайте это проще!

 wait.until(EC.visibility_of_element_located((By.CSS_SELECTOR, '#create_job_listing_ajax > div:nth-child(4) > div > div > div:nth-child(2) > center > a'))).click()
 

или

 self.browser.find_element_by_css_selector('#create_job_listing_ajax > div:nth-child(4) > div > div > div:nth-child(2) > center > a').click()
 

Комментарии:

1. Привет, Вадим, я попробовал приведенный выше код и показал следующую ошибку: объект «TestLoginpage» не имеет атрибута «браузер»

2. попробуй это wiki.mozilla.org/Converting_IDE_scripts_to_Python

3. сделайте это, скопировав «селектор», не копируйте xpath

4. если вы копируете xpath, используйте его selenium-python.readthedocs.io/…

Ответ №2:

Так как нам не enough HTML нужно должным образом давать то working xpath или иное locater , лучший способ-это использовать below xpath.

 //div[@class='col']/center[@class='center_tag']/a
 

Видите, в конце концов мы можем добраться до a tag того, у которого есть атрибут href , который генерируется динамически.

Теперь вы всегда должны проверять HTML DOM.

Шаги для проверки :

 Press F12 in Chrome -> go to element section -> do a CTRL    F -> then paste  and see `//div[@class='col']/center[@class='center_tag']/a` is getting highlighted or not. 
 

также мы должны убедиться, что мы не получаем несколько узлов, использующих этот xpath. проверьте крайний правый, сколько у нас записей ? Это должно быть 1/1 сделано для того, чтобы это сработало.

Код :

 self.driver.find_element(By.XPATH, "//div[@class='col']/center[@class='center_tag']/a").click()