Я просто пытаюсь изучить python, играя с серфингом в Интернете, просто используя python. Одна вещь, с которой я столкнулся, заключалась в том, что на некоторых сайтах у них могла быть скрытая кнопка.

Например, здесь, на Reddit, если вы перейдете на страницу своей учетной записи и хотите удалить первый / верхний комментарий на странице своей учетной записи, вы легко найдете удаление. Единственная проблема - нажать скрытую кнопку «да».

Проблема в том, что в некоторых сообщениях есть возможность изменять некоторые настройки, такие как отключение ответов в почтовом ящике, удаление и т. Д., И не все сообщения имеют те же функции / кнопки.

Все они имеют один и тот же селектор CSS 'a.yes', поэтому даже если вы получите все элементы с помощью driver.find_elements, вы не сможете получить кнопку последовательно из-за других кнопок, таких как удаление и отключение ответов входящих сообщений, и т. д. Так как одна страница может быть elem[0] = delete.yes, elem[1] = disable inbox.yes, а другая - elem[0]~elem[4] = delete.yes

Различия в тегах:
кнопка удаления

<a href="javascript:void(0)" class="yes" onclick="change_state(this, &quot;del&quot;, hide_thing, undefined, null)">yes</a>

Отключить ответы на входящие

<a href="javascript:void(0)" class="yes" onclick="change_state(this, &quot;sendreplies&quot;, null, undefined, null)">yes</a>

В настоящее время это то, что у меня есть, но строка 3 не будет работать из-за упомянутого.

elem = driver.find_element_by_link_text('delete')
elem.click()
#elem = driver.find_elements_by_css_selector('a.yes') 
#elem[i].click()   

Кто-нибудь знает, как обойти эту проблему?

3
Matt I 28 Дек 2017 в 23:34

1 ответ

Лучший ответ

Используйте XPath, чтобы перейти к родителю, а затем к следующему брату:

confirm = driver.find_element_by_xpath('(//a[contains(text(), "delete")])[1]/../following-sibling::*')

Чтобы разбить это:

  • (//a[contains(text(), "delete")])[1] - определяет местонахождение первого тега <a> со словом "удалить" в нем. При изменении 1 на 2 будет найден второй, 3 - третий и так далее.
  • /.. - перейти к родительскому тегу, который является тегом <span>, но это не имеет значения
  • /following-sibling::* - перейти к следующему родственнику (снова имя тега здесь не имеет значения)

Затем:

confirm.find_element_by_link_text('yes').click() # To click yes
# confirm.find_element_by_link_text('no').click() to click no instead
1
Mangohero1 28 Дек 2017 в 21:35