#python #selenium
#python #селен
Вопрос:
Создав браузер selenium и получив веб-страницу, это работает нормально:
...
if selenium_browser.find_element(By.ID, 'id_name'):
print "found"
...
учитывая такой кортеж:
tup = ('ID', 'id_name')
Я хотел бы иметь возможность находить такие элементы, как это:
if selenium_browser.find_element(By.tup[0], tup[1]):
но я получаю эту ошибку
AttributeError: type object 'By' has no attribute 'tup'
Как я могу это сделать без необходимости писать:
if tup[0] == 'ID':
selenium_browser.find_element(By.ID, tup[1])
...
elif tup[0] == 'CLASS_NAME':
selenium_browser.find_element(By.CLASS_NAME, tup[1])
...
elif tup[0] == 'LINK_TEXT':
etc etc
http://selenium-python.readthedocs.io/api.html ?выделите = #module-selenium.webdriver.common.by
Ответ №1:
Если вы хотите напрямую предоставить кортеж find_element
, добавьте *
впереди:
locator = (By.ID, 'id')
element = driver.find_element(*locator)
Или с помощью метода, представленного в виде строки:
locator = ('ID', 'id_name')
driver.find_element(getattr(By, locator[0]), locator[1])
Ответ №2:
Ваш синтаксис отключен.
В документах говорится, что это должно использоваться как таковое: find_element(by='id', value=None)
Поэтому вместо
if selenium_browser.find_element(By.tup[0], tup[1]):
Вы должны сделать
if selenium_browser.find_element(tup[0], tup[1]):
#or
if selenium_browser.find_element(by=tup[0], value=tup[1]):
Вам может понадобиться или не понадобиться вводить нижний регистр by
элемента, т.Е. tup[0].lower()