Q:

Selenium Python. Сложный поиск

Есть несколько элементов которые имеют двойное описание с наличием ссылки: <a class="name-link" href="ССЫЛКА">AAA</a> и <a class="name-link" href="ССЫЛКА">BBB/CCC/DDD</a>
Цель: Среди схожих описаний типа AAA, найти по второму описанию, например, ССС
Мой код:
from selenium import webdriver
from selenium.webdriver.common.keys import Keys

A = "AAA"
B = "CCC"

driver = webdriver.Firefox(executable_path="C:\Program Files\geckodriver.exe")
driver.get("ССЫЛКА НА СТРАНИЦУ С ЭЛЕМЕНТАМИ")
element = driver.find_element_by_link_text(A) and driver.find_element_by_link_text(B)

Подскажите пожалуйста, как составить сложную цепочку поиска с необходимыми условиями

A:

Вам нужно найти один элемент с уникальным наличием двух нужных аргументов?
Вам нужно найти соседний элемент с определённым аргументом по определённому аргументу соседа?
Или вам нужно найти несколько элементов у одних из который будет один аргумент, у других другой?
Если по первому варианту вопроса, то напишите XPath с двумя атрибутами равными A и B соответственной и ищите такой объект одним driver.find_element_by_xpath()
Если дадите хотя-бы пример структуры вашего html, то это сразу упростит задачу))

Я всё равно не понял что именно вам нужно)))) Но догадываюсь что именно это:
Согласно вашего примера:
<article>
    <div>
        <h1>
            <a class="name-link" href="ссылка1">Square</a>
        </h1>
        <p>
            <a class="name-link" href="ссылка1">Blue</a>
    </div>
</article>
<article>
    <div>
        <h1>
            <a class="name-link" href="ссылка2">Square</a>
        </h1>
        <p>
            <a class="name-link" href="ссылка2">Black</a>
    </div>
</article>

Вам нужно найти элемент с текстовым блоком равным 'Black', если рядом (по определённой структуре) есть сосед с текстом 'Square' (или наоборот Square с соседом Black). И так же согласно структуре, у двух этих элементов общий предок div.
Вот так это можно решить с помощью xpath:
//*[text()='Square']/ancestor::div//*[text()='Black']

Этот xpath словами - брузер, дружище, верни мне Black если у общего предка div будет потомок Square, но других не нужно!
Подробнее о коде, но начнём с конца:
//*[text()='Black'] - ищем целевой элемент с текстом 'Black' в непонятной (//*) структуре 
ancestor::div - с предком div, но неизвестным количеством шагов до него (ancestor::)
//*[text()='Square'] - с потомком с текстом 'Square' в такой-же непонятной структуре (//*)
И потом просим WebDriver сделать это для нас))):
element = driver.find_element_by_xpath(//*[text()='Square']/ancestor::div//*[text()='Black'])

Почему xpath, а не текст? Так мы, помимо указания конкретного элемента, ещё и указываем приблизительную структуру документа, и поиск происходит одной командой)
Надеюсь именно это вам и нужно было)))

UPD2
Если вам нужно найти элемент у которого есть сосед 'Black', то вам поможет вот такой xpath:
//*[text()='Black']/ancestor::div//*/a[text()!='Black']

Запрос с таким xpath вернёт два элемента - Square и Triangle у которых есть сосед Black
И вы должны понимать, что .find_element_by_xpath() вернёт только ПЕРВОЕ попадание в критерий, если вам нужны ВСЕ элементы подходящие под критерии то - .find_elements_by_xpath().

