Selenium / Python: выбор ссылки из длинного списка после нахождения правильного местоположения

#python #selenium #webdriver #selenium-chromedriver

#python #selenium #webdriver #selenium-chromedriver

Вопрос:

У компании есть список из более чем 100 сайтов, которые я пытаюсь использовать Selenium webdriver для автоматического перехода пользователя на этот сайт. Я довольно новичок в программировании, поэтому, пожалуйста, простите меня, если мой вопрос сформулирован плохо.. Но я пытаюсь взять у пользователя название сайта, такого как «Alpharetta — Cemex» в примере ниже, и найти его в этом длинном списке, а затем выбрать эту ссылку. Благодаря тестированию я почти уверен, что элемент, который мне нужно щелкнуть, — это класс h3, который также содержит название сайта под именем data-hmi

Пример кода веб-сайта: введите описание изображения здесь

Я пытался использовать приведенное ниже, и, похоже, это никогда не работает..

 driver.find_element_by_css_selector("h3.tru-card-head-text uk-text-center[data-hmi-name='Alpharetta - Cemex']").click()
 
#For this one I tried to select the h3 class by searching for all those elements that has the name Alpharetta - Cemex
  

или

 **theCards = main.find_elements_by_tag_name("h3")** #I tried both of these declarations for theCards
**#theCards = main.find_elements_by_class_name("tru-card-wrapper")**

#then used the loop below. This obviously didn't work and it just returns an error that card.text doesn't actually exist

for card in theCards:
    #title = card.find_elements_by_tag_name("h3")
    print(card.text)
    if(card.text == theSite):
        card.click()
  

Любая помощь или руководство были бы очень признательны! Я новичок в программировании на Python, и если вы можете объяснить, что я делаю неправильно, я был бы вечно благодарен!

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

1. приятель, добро пожаловать в мир кодирования. Можете ли вы сказать, с какой ошибкой / проблемой вы столкнулись с вашим текущим кодом. Также вы всегда должны делиться своим HTML в текстовом формате, а не фрагментом. Я смог бы помочь вам гораздо лучше, если бы вы поделились всей вышеуказанной информацией.

2. Прости, Рахул! В следующий раз я обязательно это сделаю.

3. Не извиняйся, приятель, мы все здесь, чтобы учиться. Приятного обучения и приветствий.

Ответ №1:

Если вы хотите щелкнуть по одной ссылке (например, Alpharetta — Cemex), вы можете попробовать, как показано ниже:

 theSite = "Alpharetta - Cemex" #You can store user inputted site Name here
linkXpath = "//a[h3[contains(text(),'" theSite  "']]"
    
WebDriverWait(driver, 30).until(EC.element_to_be_clickable((By.XPATH, linkXpath))).click() #This will wait for element to be clickable before it clicks
  

В случае, если вышеописанное не работает. Если ваша ссылка отсутствует на экране / не видна. Вы можете использовать Java script, чтобы сначала перейти к элементу и щелкнуть, как показано ниже:

 ele = WebDriverWait(driver, 30).until(EC.presence_of_element_located((By.XPATH, linkXpath)))
driver.execute_script("arguments[0].scrollIntoView();", ele )
driver.execute_script("arguments[0].click();", ele )
  

Вам нужно импортировать:

 from selenium import webdriver
from selenium.webdriver.common.by import By
from selenium.webdriver.support import expected_conditions as EC
from selenium.webdriver.support.wait import WebDriverWait
  

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

1. Это превосходно! Большое спасибо, Рахул. Не могу сказать вам, насколько все это полезно и понятно.

2. Рад помочь mate. Пожалуйста, проголосуйте, если это поможет вам решить вашу проблему. Это, в свою очередь, поможет мне и другим :). Приветствия!!!!