Python и Selenium - выберите конкретную c радиокнопку на основе имени и текста в - PullRequest
1 голос
/ 16 апреля 2020

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

HTML

    <div data-a-input-name="slotsRadioGroup" class="a-radio a-radio-fancy slotButtonRadio"><label><input type="radio" name="slotsRadioGroup" value="" autocomplete="off"><i class="a-icon a-icon-radio"></i><span class="a-label a-radio-label">
        <span class="slotRadioLabel">
            5PM - 7PM
        </span>

    <div class="a-row">
        <span class="a-size-small slot-button-micro-copy preselected-visible">
            Soonest available time with all items.
        </span>
    </div>


    </span></label></div>

</div></div>

У переключателя, который мне нужно выбрать, всегда будет присутствовать текст «Скоро доступно ...».

То, что я пробовал

У меня есть пробовал различные варианты кода xpath, чтобы попытаться выбрать это на основе текста. Моя последняя попытка была:

driver.find_element_by_xpath("//input[@type='radio']and following-sibling::span[contains(., 'Soonest available')").click()

Что приводит к следующей ошибке:

SyntaxError: Failed to execute 'evaluate' on 'Document': The string '//input[@type='radio']and following-sibling::span[contains(., 'Soonest available')' is not a valid XPath expression.

Ожидаемый результат Я хочу, чтобы была возможность выбрать специфику c переключатель на основе приведенного выше текста.

Ответы [ 2 ]

1 голос
/ 16 апреля 2020

Выбор радиокнопки на основе текста Induce WebDriverWait и ожидание element_to_be_clickable () и следующих параметров xpath.

XPATH 1:

WebDriverWait(driver,10).until(EC.element_to_be_clickable((By.XPATH,"//label[.//span[contains(.,'Soonest available time with all items')]]/input[@name='slotsRadioGroup']"))).click()

XPATH 2:

WebDriverWait(driver,10).until(EC.element_to_be_clickable((By.XPATH,"//span[contains(.,'Soonest available time with all items')]/preceding-sibling::input[1]"))).click()

Если щелчок веб-драйвера не работает, вы можете попробовать javascripts executor, чтобы нажать тот же.

radiobtn=WebDriverWait(driver,10).until(EC.visibility_of_element_located((By.XPATH,"//label[.//span[contains(.,'Soonest available time with all items')]]/input[@name='slotsRadioGroup']")))

driver.execute_script("arguments[0].click();", radiobtn)

Примечание : - Вам необходимо импортировать следующие библиотеки.

from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.common.by import By
from selenium.webdriver.support import expected_conditions as EC
0 голосов
/ 16 апреля 2020

Попробуйте это:

for i in driver.find_elements_by_tag_name("span"):
    if "Soonest available" in i.text:
        result = i
        break
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...