Как нажать на все «роль = кнопка» на веб-странице, используя селен и питон - PullRequest
0 голосов
/ 03 июня 2018

Я пытаюсь создать свой первый проект, используя Python и Selenium, и я новичок в этом, это просто простой проект, который запрашивает у пользователя его / ее имя пользователя и пароль на Facebook, а затем авторизуется, перенаправляет на facebook.com/ user / следующую страницу и отписаться от всех, за кем подписан пользователь.

Вот мой код ниже

Я импортировал необходимые модули, используя эти коды

from selenium import webdriver
from selenium.webdriver.common.keys import Keys
import selenium
import time

Я закрыл Facebookвсплывающее уведомление, чтобы избежать нарушения кода ..

##SHUTTING POPUP NOTIFICATION
chrome_options = webdriver.ChromeOptions()
prefs = {"profile.default_content_setting_values.notifications": 2}
chrome_options.add_experimental_option("prefs", prefs)
chrome_options.add_argument("start-maximized")
chrome_options.add_argument("start-maximized")
driver = webdriver.Chrome(chrome_options=chrome_options)

Определен логин func, который принимает имя пользователя и пароль после открытия facebook ..

  def login():
        #Login
        user = input('Whats your username or email    ')
        passw = input('Input your password    ')
        driver.get("https://www.facebook.com/")
        username = driver.find_element_by_name("email")
        username.send_keys(user)
        password = driver.find_element_by_name("pass")
        password.send_keys(passw)
        password.send_keys(Keys.RETURN)

Далее я только что создал3 секФункция времени

  def timeToSleep():
     time.sleep(3)

Функция getPage - это функция для перенаправления на мой пункт назначения, т. Е. Пользователь, следующий за

  def getPage():
        ##Get Page
        driver.get("https://www.facebook.com/Username/ID/following")

. Это функция щелчка, чтобы нажимать на нужные мне места, и это гдемоя проблема в том, что я хотел бы начать нажимать на все последующие с помощью щелчка ниже. [Check img]

  def click():
        xpath = "//a[@role='button']"
        a=driver.find_elements_by_xpath(xpath)
        for posts in a:
              posts.click()

НАЖМИТЕ НА СЛЕДУЮЩИЙ

НоМоя проблема сейчас заключается в следующем (следующая кнопка не имеет никакого класса или идентификатора, кроме атрибута привязки "role = 'button') ..

Код работал бы нормально, но они являются другими элементами навеб-страница с таким же атрибутом role = 'button', как на картинке ниже: Панель инструментов Панели инструментов Facebook имеют одинаковые функции кнопок ролей. Мой вопрос заключается в следующем: как заставить Selenium пропустить панель инструментов и начать нажимать на кнопкуСледующие кнопки ..

Извините, если мое объяснение плохое ... Я с удовольствием оценю любую помощь от любого органа ..

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

1 Ответ

0 голосов
/ 03 июня 2018

Я следую за Марком Цукербергом на Facebook, и вот путь, по которому можно щелкнуть ссылку «отписаться»:

//a[text()='Mark Zuckerberg']/../../following-sibling::div[2]/a  

Аналогичным образом, вы можете заменить имя человека в вашем случае, чтобы перейти по ссылке «Отписаться».

Если никто из ваших друзей не подписан на человека, за которым вы следуете, то вы также можете использовать этот XPATH:

//a[contains(@data-hovercard,'/ajax/hovercard/user.php?')]/../../following-sibling::div/a   

, который не зависит от имени человека.Обратите внимание, что это даст вам список веб-элементов, а не один элемент.[Это вполне подходит для вашего требования, так как вы хотите нажать на каждую ссылку отписаться].

HTH!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...