Найти элемент веб-страницы с изменением местоположения, но без изменения текста - PullRequest
0 голосов
/ 11 января 2020

Я пытаюсь найти элемент на нескольких веб-страницах. Все веб-страницы находятся на одном и том же веб-сайте, но структура веб-сайта иногда изменяется на каждой странице.

При просмотре страниц я вижу следующие полные xpaths:

1; /html/body/div[2]/div/div[2]/div/div/main/article/div/div/p[3]/strong/a[1]
2, /html/body/div[2]/div/div[2]/div/div/main/article/div/div/p[10]/a[1]
3; /html/body/div[2]/div/div[2]/div/div/main/article/div/div/p[3]/strong/a
4; /html/body/div[2]/div/div[2]/div/div/main/article/div/div/p[3]/strong/a
5; /html/body/div[2]/div/div[2]/div/div/main/article/div/div/p[3]/strong/a
6; /html/body/div[2]/div/div[2]/div/div/main/article/div/div/p[10]/a[1]
7; /html/body/div[2]/div/div[2]/div/div/main/article/div/div/p[10]/a[1]

с 1 , 2 , 3 , 4 , 5 , 6 , 7

Текст последнего элемента всегда содержит строку Uptobox Как найти элемент каждый раз, даже если структура различна.

Текущий код (работает только для пары из вышеупомянутых и имеет другой критерий):

import selenium
from selenium import webdriver

driver = webdriver.Chrome()
driver.get(url)
links = driver.find_elements_by_xpath('//p[contains(., "Download")]//a')  # Need to adjust this to final uptobox-level

Пожалуйста, дайте мне знать, что мне нужно настроить

С уважением

1032 * Huib

1 Ответ

1 голос
/ 11 января 2020

Используйте //a[.='Uptobox'], чтобы получить Uptobox кнопку, но вам нужно подождать, пока элемент окажется в HTML. Если вы щелкнете по условию element_to_be_clickable, чтобы дождаться нажатия на элемент.

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

driver = webdriver.Chrome()
wait = WebDriverWait(driver, 10)
driver.get(url)

uptobox = wait.until(EC.element_to_be_clickable((By.XPATH, "//a[.='Uptobox']")))
uptobox.click()

Обновление, селектор a.btn[rel*='nofollow'] css будет работать на всех страницах:

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

driver = webdriver.Chrome()
wait = WebDriverWait(driver, 10)
driver.get(url)

links = wait.until(EC.visibility_of_all_elements_located((By.CSS_SELECTOR, "a.btn[rel*='nofollow']")))
for link in links:
    print(link.get_attribute("href"))
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...