@anya_hacker

Как кликнуть на ссылку?

Написала программу, которая авторизуется по прокси, очищает кукис, ставит фейковый юзер-агент, и всё это с помощью селениума. В яндекс пишу запрос: починить самокат.
Если в выдаче яндекса есть сайт prostomesto.ru, то нужно по нему перейти.
Но почему-то селениум его не видит (строка driver.find_element_by_link_text(site_link).click() почему-то не переходит по ссылке с называнием prostomesto.ru)
Как проверить, что ссылка именно prostomesto.ru и собственно по ней перейти?
Код:
from seleniumwire import webdriver
from fake_useragent import UserAgent

from time import sleep


def yandex():
    login = 'R5edkrXE'
    password = 'rU1Ff396'
    proxy_adress_now = '194.59.12.83:56451'

    proxy_options = {
        "proxy": {
            "https": f"https://{login}:{password}@{proxy_adress_now}"
        },
        "User-Agent": UserAgent().chrome  # фейковый юзер-агент
    }

    driver = webdriver.Chrome(
        executable_path='chromedriver.exe',
        seleniumwire_options=proxy_options
    )
    driver.maximize_window()
    driver.delete_all_cookies()  # очищаю куки

    try:
        site_link = 'prostomesto.ru' # если написать "Самокаты есть у нас! Смотри прямо сейчас!", то он кликает на ссылку
        url = f"https://yandex.ru/search/direct?&text=починить самокат"
        driver.delete_all_cookies() # снова очищаем куки чтоб уже наверняка
        driver.get(url)
        print("открыли сайт яндекса")
        sleep(25)
        try:
            driver.find_element_by_link_text(site_link).click()  # открываем сайт, если его ссылка - prostomesto.ru
            sleep(3)
        except Exception:
            print(f"сайта {site_link} нет в рекламной выдаче яндекса")
            pass


    except Exception as e:
        print(e)

    finally:
        driver.close()
        driver.quit()


if __name__ == '__main__':
    yandex()


605bb12459c41882950817.png
  • Вопрос задан
  • 242 просмотра
Решения вопроса 1
@GeneD88
QA
Скорее всего вы не можете найти его потому, что prosto...ru находится в теге b.
find_element_by_link_text ищет элемент, если он под тегом a.

Ищите по xpath.
Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 1
@alekssamos
Программист любитель
Моя теория: если бы Яндекс помечал рекламные ссылки, каким-нибудь классом, то блокировщики съедали бы их только так, поэтому ссылки нужно смешать с органическими.
Ну или ищи по совпадению URL адреса (href), какой-нибудь селектор типа
Правой кнопкой > просмотредь код элемента
и составляй селектор. Короче пробуй или через find_element_by_css_selector, или через find_element_by_class_name.
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы