Как я могу нажать на динамическую кнопку Twitter следовать с селеном и питоном? - PullRequest
0 голосов
/ 23 сентября 2019

Я пытаюсь нажать на кнопку подписки в твиттере, но она динамична и имеет атрибуты, о которых я не нахожу много в документации по селену. Это HTML-код кнопки:

Screenshot of code

В настоящее время это моя следующая функция:

    def follow(driver, username):
        driver.get('https://twitter.com/' + username)
        wait = WebDriverWait(driver, 10)
        follow = wait.until(EC.element_to_be_clickable((By.CLASS_NAME, 'follow-button')))
        follow.click()

Ответы [ 3 ]

0 голосов
/ 23 сентября 2019

попробуйте это ? xpath

(//span[text()='Follow']/ancestor::div[@role='button'])[1]

Индекс [1] всегда будет выбирать первую кнопку «Follow» в случае, если имеется несколько кнопок «Follow».

0 голосов
/ 23 сентября 2019

Вы можете попробовать стандартный селектор XPath, который ищет только текст «Follow» и не заботится о теге включения:

//*[contains(text(), 'Follow')]

или

//*[text()='Follow']

Если есть несколько экземпляров этой кнопки, вы можете попробовать:

Driver.FindElement(By.XPath("//*[text()='Follow']")[0].Click();

0 голосов
/ 23 сентября 2019

Попробуйте следующий Xpath, чтобы нажать на Follow

wait = WebDriverWait(driver, 10)
follow = wait.until(EC.element_to_be_clickable((By.XPATH, '//span[text()="Follow"]')))
follow.click()

ИЛИ

wait = WebDriverWait(driver, 10)
follow = wait.until(EC.element_to_be_clickable((By.XPATH, '//span[contains(.,"Follow")]')))
follow.click()

Вы получаете TabError: inconsistent use of tabs and spaces in indentation, поскольку follow.click () не быловстроенный в ваш исходный код. Попробуйте сейчас.

def follow(driver, username):
    driver.get('https://twitter.com/' + username)
    wait = WebDriverWait(driver, 10)
    follow = wait.until(EC.element_to_be_clickable((By.XPATH, '//span[text()="Follow"]')))
    follow.click()
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...