Выбрать элемент по частичному идентификатору, используя Selenium с python?

Я пытаюсь получить доступ к веб-элементу в Selenium в Python 2.7. Идентификатор элемента выглядит следующим образом:

cell.line.order(240686080).item(250444868).unitCost

Первая числовая строка «240686080» известна, но второе число «250444868» заранее неизвестно.

Я пытался добраться до него как-то так.

from selenium import webdriver
driver = webdriver.Firefox()
driver.get("somewebsite.com")
driver.find_elements_by_id('input.line.order(240417939).item('+ '\d{9}'+').unitCost')

Итак, мой вопрос: можем ли мы найти и получить доступ к этому элементу только с известной частью идентификатора?

Я нашел ответ на аналогичный вопрос ниже, но он был на С#. К сожалению, я не знаю С#.

Поиск элемента по частичному идентификатору с помощью Selenium в C#

Заранее спасибо!

Отредактировано 4/8

Элемент кодируется следующим образом:

<td id="cell.line.order(240417939).item(250159165).unitCost" class="or_monetarydata">
    <input id="input.line.order(240417939).item(250159165).unitCost" type="hidden" value="135.00" 
    name="order(240417939).item(250159165).unitcost"></input>

    135.00

    </td>

Я мог бы получить список элементов

value=driver.find_elements_by_xpath("//*[contains(@id, 'input.line.order(240417939)')]")

Благодарю вас!


person bing    schedule 06.04.2013    source источник


Ответы (1)


Хотя ответ находится на C#, базовое решение остается тем же, используя селекторы CSS:

driver.find_elements_by_css_selector('input[id*='cell.line.order(240686080)']')

или XPath также сможет это сделать:

driver.find_elements_by_xpath('//*[contains(@id, 'cell.line.order(240686080)')]')
person Arran    schedule 06.04.2013
comment
Я мог бы использовать второй метод, чтобы получить список, и последний — это то, чего я хочу достичь. Но я не мог использовать [-1].get_attribute('value') для получения атрибута значения. Ты знаешь почему? Спасибо. Исходный код этого элемента выглядит следующим образом: .unitCost type=hidden value=135.00 name=order(240417939).item(250159165).unitcost›‹/input› 135.00 ‹/td› - person bing; 08.04.2013
comment
Забудь это. Я заменил «cell.line.order (240686080)» на «input.line.order (240686080)», и получил то, что мне нужно. Спасибо!!! - person bing; 08.04.2013
comment
@Arran: это дает мне imgLink = browser.find_elements_by_css_selector('img[id$='Image_img']') ^ SyntaxError: неверный синтаксис Попытался заменить внешний ' на я не могу найти div. Любые идеи? - person kidd0; 06.03.2015