• Почему сайт определяет Selenium Webdriver как бота?

    @bfesiuk Автор вопроса
    сергей кузьмин, большое спасибо за ответ. Юзер-агент меняю с помощью библиотеки fake_useragent. Если отключить смену юзер-агента, то все становится намного лучше. Использую хром и видимо когда попадается юзер-агент другого браузера, сайт делает переадресацию.
  • Selenium не может найти элемент?

    @bfesiuk Автор вопроса
    Я сначала делаю селект формы в которой находятся два нужных мне инпута. Но форму оно тоже не может найти.
    5f7b31dc0e7bd180522902.png
  • Почему возвращает status-code 400?

    @bfesiuk Автор вопроса
    Проблему решил, ошибка максимально глупая - лишний пробел в названии параметра
  • Парсинг AJAX в BeautifulSoup Python?

    @bfesiuk Автор вопроса
    Здраствуйте, спасибо за помощь)

    Немножко обновил скрипт:
    import requests
    from bs4 import BeautifulSoup
    import json
    
    HEADERS = {"user-agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/83.0.4103.97 Safari/537.36",
               'Accept': 'application/json, text/javascript, */*; q=0.01',
               'Accept - Encoding': 'gzip, deflate, br',
                'Accept - Language': 'ru-RU,ru;q=0.9,en-US;q=0.8,en;q=0.7',
               'Referer': 'https://jobs.dou.ua/vacancies/?category=Ruby'}
    
    URL = "https://jobs.dou.ua/vacancies/?category=Ruby"
    
    session = requests.Session()
    
    
    def get_html(url):
        r = session.get(url, headers=HEADERS)
        return r
    
    
    def get_links(response):
        if response.status_code == 200:
            html = BeautifulSoup(response.text, "html.parser")
            lis = html.find_all('li', class_="l-vacancy")
    
            # Количество вакансий до нажатия
            print(len(lis))
    
            # Костыльно достаю csrf
            script = str(html.select('script')[5])
            csrf = str(script[32:32+64])
            print(script)
            print(csrf)
    
            load_data = {
                'csrfmiddlewaretoken': csrf,
                'count': 20}
            response = session.post('https://jobs.dou.ua/vacancies/xhr-load/?category=Ruby', data=load_data)
    
            html = BeautifulSoup(response.text, "html.parser")
            lis = html.find_all('li', class_="l-vacancy")
    
            # Количество вакансий после нажатия
            print(len(lis))
        else:
            return 'Connection error!'
    
    
    get_links(get_html(URL))


    Ответ получаю либо такой:
    Количество вакансий до нажатия: 20
    script:
    <script src="https://s.dou.ua/build/built.v2069.75176dd.js" type="text/javascript"></script>

    csrf: ild/built.v2069.75176dd.js" type="text/javascript">
    Количество вакансий после нажатия: 0


    Либо такой:
    Количество вакансий до нажатия: 20
    script:
    <script>
    		window.CSRF_TOKEN = "FDWmjTJdOi1CHjjIcUbjobYCNr0DFBqMB98TZ0jcCCxHYvejjlWjGPmwlHDQOKoz";
    		window.USER_ID = '';
    		window.LOGIN_URL = "https://jobs.dou.ua/ajax-login/";
    		window.RESET_PASSWORD_URL = "https://jobs.dou.ua/j-lost-password/";
    		window.LANG = "ru";
    		var MEDIA_URL = 'https://s.dou.ua/';
    	</script>

    csrf: FDWmjTJdOi1CHjjIcUbjobYCNr0DFBqMB98TZ0jcCCxHYvejjlWjGPmwlHDQOKoz
    Количество вакансий после нажатия: 0


    Тег скрипта выгладит таким образом (класса или айди найти не удалось) возможно есть еще какие нибудь пути достать корректно:
    5ee5ec16a6754738130512.png

    Сам XHR запрос выглядит так:
    5ee5ecea61a7a569492375.png

    Скорее всего я что-то упустил.
    Спасибо за отклик)