Как мне сделать так, чтобы, если XPATH не видит элемент на веб-сайте, он пропускал эту строку и переходил к следующей строке?

#python #selenium #xpath

#python #selenium #xpath

Вопрос:

Как мне сделать так, чтобы, если XPATH не видит элемент на странице, он пропускал элемент и переходил к следующей строке? Мой код:

 1. driver.find_element_by_xpath('//img[@alt = "Black"]').click()
  

а затем, если он не находит 1-й элемент, он пропускает и пытается найти:

 2. driver.find_element_by_xpath('//*[@id="add-remove-buttons"]/input').click()
  

Я предполагаю, что это как-то связано с «если отображается ___, щелкните, иначе, если ____ click», хотя я не уверен, как это отформатировать.

Комментарии:

1. find_elements_by_xpath вернет список, размер которого вы можете проверить, чтобы использовать его в if вместо try

Ответ №1:

Используйте блок try и catch и catch ElementNotFoundException исключение Java:

 try{
 //your code to find element
}
catch(ElementNotFoundException)
{
  //print element not found
}
// find another element and perform action
  

Ссылка-https://www.w3schools.com/python/python_try_except.asp

Python:

  try:
  //your code
 except ElementNotFoundException:
   print("ELEMENT NOT fOUND")
  

Комментарии:

1. В конце я использовал блок try, except, finally, что означает, что даже если информация внутри «try» неверна, информация внутри блока «finally» будет выполнена. Спасибо!

Ответ №2:

В xpath вы можете получить объединение двух наборов узлов

 driver.find_element_by_xpath(
    '//img[@alt = "Black"]|//*[@id="add-remove-buttons"]/input').click()
  

Комментарии:

1. Но как мне сделать так, чтобы, даже если xpath не находит ‘// img [@alt = «Black»]’, он все равно нажимал ‘// * [@id =»add-remove-buttons»] / input’ ?

2. Для этого | и предназначен. Он собирает все с обеих сторон. Например, после открытия stackoverflow.com , Я использовал //tr|//div . На странице нет никаких tr, поэтому я получил первый div.