Невозможно сделать различие между двумя селекторами, предназначенными для выполнения одного конкретного действия. - PullRequest
1 голос
/ 14 июня 2019

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

Первый селектор:

"a[href$='/follow']"

Второй:

"a[href$='/follow'] > button"

Часть соответствующего html:

<div class="nZSzR">
    <h1 class="fDxYl">
        some royal personality
    </h1>
    <span class="VerifiedBadge" title="Verified">
        Verified
    </span>
    <a class="BY3EC" href="/accounts/follow" rel="nofollow">
        <button class="L3NKy" type="button">
            Follow
        </button>
    </a>
</div>

К какому пути я должен придерживаться и почему?

Ответы [ 2 ]

1 голос
/ 14 июня 2019

MITHU,

css selector, который у вас есть a[href$='/follow'], представляет собой тег привязки с атрибутом href , который заканчивается на /follow

второй a[href$='/follow'] > button, нацелен на кнопку , чьим родителем является тег привязки.

Итак, во втором css вы можете ясно видеть, что есть зависимость кнопки.Так что, если вы можете начать с первого, вы должны отдать этому приоритет.

Для этого HTML :

<a class="BY3EC" href="/accounts/follow" rel="nofollow">
        <button class="L3NKy" type="button">
            Follow
        </button>
</a>

Сначала ясно css имеет меньшую зависимость.

Если это якорный тег, то для ответа не требуется css selector .

Вы можете напрямую перейти к LINK_TEXT или PARTIAL_LINK_TEXT

Пример кода:

continue_link = driver.find_element_by_link_text('Continue')
continue_link = driver.find_element_by_partial_link_text('Conti')

Для получения дополнительной информации пройдите этот официальный ссылка .

0 голосов
/ 14 июня 2019

Таким образом,> является дочерним комбинатором , означающим, что вы будете соответствовать правой стороне, только если она является дочерней по левой стороне.

В зависимости от того, насколько последовательны страницы, я бы искал более быстрый селектор и в этом случае выбрал бы третий вариант

#react-root a

Это ваша ссылка: https://www.instagram.com/cristiano/?hl=en

Селектор идентификатора и типа будет быстрее, чем особенно при использовании find_element_by_css_selector, поскольку вам нужно только первое совпадение

...