#python #selenium #selenium-webdriver #selenium-chromedriver #try-catch
#python #selenium #selenium-webdriver #selenium-chromedriver #попробуйте-catch
Вопрос:
Идентификатор кнопки, на которую я хочу нажать, динамически меняется. Например, идентификатор будет id = Button7, тогда при следующем запуске моего кода он будет id = Button19. Я заметил, что он перебирает набор идентификаторов, но в произвольном порядке.
Я хотел бы перебирать все возможные решения, пока одно из них не заработает. Хотелось бы сделать что-то похожее на эту логику.
try:
source8 = driver.find_element_by_xpath('//*[@id="xl_dijit-bootstrap_Button_99"]')
ActionChains(driver).click(source8).perform()
except Exception as e:
source8 = driver.find_element_by_xpath('//*[@id="xl_dijit-bootstrap_Button_7"]')
ActionChains(driver).click(source8).perform()
except Exception as e:
source8 = driver.find_element_by_xpath('//*[@id="xl_dijit-bootstrap_Button_27"]')
ActionChains(driver).click(source8).perform()
Комментарии:
1. Кроме идентификатора, какими другими свойствами обладает кнопка, нам нужно найти уникальность элемента, прежде чем выполнять какую-либо операцию, концепция итерации путем изменения идентификатора может указывать на другие элементы, похожие на это. Опубликуйте фрагмент исходного кода или URL
Ответ №1:
Просто выполните итерацию по xpaths:
for xpath in ['//xpath1', '//hpath2', '//xpath3']:
try:
# do something with xpath
break
except:
print(xpath " failed!")
Ответ №2:
Вы можете использовать оси contains XPath, чтобы сначала определить идентификатор, а затем выполнить необходимые действия.
elementId = driver.find_element_by_xpath("//input[contains(@id, 'xl_dijit-bootstrap_Button_')]")
elementId.click()
Еще, если вы хотите выполнить какое-то другое действие с определенным идентификатором, затем извлеките его атрибут и с помощью этого атрибута (‘idTextAttribute’) вы можете реализовать вариант переключения.
idTextAttribute = elementId.get_attribute("id")
def SwitchToId(idTextAttribute):
switcher = {
"xl_dijit-bootstrap_Button_99": Do Something, like click Or sendKeys,
"xl_dijit-bootstrap_Button_7": Do Something, like click Or sendKeys,
"xl_dijit-bootstrap_Button_27": Do Something, like click Or sendKeys,
}
return switcher.get(idTextAttribute, "ID not Found")
Примечание: в Python нет switch case, подобного Java, поэтому вы можете попробовать switcher или блок if-elif.