• XSS.stack #1 – первый литературный журнал от юзеров форума

Python - задай вопрос получи ответ

зачем разбивать по строке
Прочитай внимательно ТЗ, он просил одну строку с файла разбить по пробелу в цикл.

К тому же автор не упоминал что в файле есть "\n" и "\t".
Метод файла file.readline() читает одну целую строку из файла. Конечный символ новой строки \n сохраняется в строке.
 
Прочитай внимательно ТЗ, он просил одну строку с файла разбить по пробелу в цикл.


Метод файла file.readline() читает одну целую строку из файла. Конечный символ новой строки \n сохраняется в строке.
Я прекрасно знаю как работает readline, т.е ты собираешься выполнять цикл из readline'ов и цикл из split(" ") и ещё к тому же перед этим replace("\n") хотя всё это можно сделать в 3 простых действия??? 1 раз .read(), 1 раз split("\n") и цикл с split(" ").
зачем заставлять и то медленный яп выполнять в 10 а то и в 100 раз больше операций когда это легко оптимизируется... гениальные люди... такими темпами можешь свой open() написать и readline для этого.
 
Привет ребята. Написал с помощью ИИ дор на telegra.ph и всё устраивает в принципе. Это заготовка и еще буду дорабатывать. Главное не могу разобраться почему линк получается не анкорный. Спасибо если поможете.
Python:
import os
import random
import csv
import json
import time
import re
import requests
import logging
from datetime import datetime
from urllib.parse import urlparse, unquote
from concurrent.futures import ThreadPoolExecutor, as_completed
from http.client import HTTPConnection
import string

# Включить детальное логирование запросов
HTTPConnection.debuglevel = 1

class ArticlePublisher:
    def __init__(self):
        self.setup_logging()
        self.use_proxies = self.ask_proxy_usage()
        self.proxy_pool = self.load_proxies() if self.use_proxies else []
        self.load_resources()
        self.published = []
        self.delay_range = (30, 60)  # Увеличенная задержка между запросами
        self.access_token = self.get_access_token()  # Получаем токен доступа
        # Настройка логгера для requests
        self.requests_logger = logging.getLogger("urllib3")
        self.requests_logger.setLevel(logging.DEBUG)

    def setup_logging(self):
        logging.basicConfig(
            filename='debug.log',
            level=logging.DEBUG,
            format='%(asctime)s [%(levelname)s] %(message)s',
            datefmt='%Y-%m-%d %H:%M:%S'
        )
        self.logger = logging.getLogger()

    def ask_proxy_usage(self):
        print("\n" + "="*40)
        choice = input("Использовать прокси? (y/n): ").lower()
        return choice == 'y'

    def load_resources(self):
        try:
            with open('articles.txt', 'r', encoding='utf-8') as f:
                self.articles = [line.strip() for line in f]
            
            with open('links.txt', 'r', encoding='utf-8') as f:
                self.links = [unquote(line.strip()) for line in f]  # Декодируем URL
                random.shuffle(self.links)
            with open('anchors.txt', 'r', encoding='utf-8') as f:
                self.anchors = [line.strip() for line in f]
        except Exception as e:
            self.logger.error(f"Ошибка загрузки ресурсов: {str(e)}")
            raise

    def load_proxies(self):
        proxies = []
        try:
            with open('proxies.txt', 'r') as f:
                for line in f:
                    parts = line.strip().split(':')
                    if len(parts) != 4:
                        continue
                    ip, port, user, pwd = parts
                    proxy = {
                        'http': f'socks5://{user}:{pwd}@{ip}:{port}',
                        'https': f'socks5://{user}:{pwd}@{ip}:{port}'
                    }
                    proxies.append(proxy)
            self.logger.debug(f"Загружено прокси: {len(proxies)}")
            return proxies
        except Exception as e:
            self.logger.error(f"Ошибка загрузки прокси: {str(e)}")
            return []

    def sanitize_content(self, text):
        text = re.sub(r'[^\w\s\-.,!?@#$%^&*()+=/:;\'"<>]', '', text)
        return text[:5000]

    def insert_link(self, text, link, anchor):
        sentences = [s for s in text.split('. ') if s]
        if not sentences:
            return text
        
        insert_pos = random.randint(0, len(sentences)-1)
        
        # Генерируем JSON-структуру для ссылки
        link_json = {
            "tag": "a",
            "attrs": {
                "href": link,
                "target": "_blank",
                "rel": "nofollow"
            },
            "children": [anchor]
        }
        
        # Преобразуем JSON-структуру в строку для вставки в текст
        sentences[insert_pos] += f' {json.dumps(link_json, ensure_ascii=False)}'
        
        return '. '.join(sentences)

    def generate_anchor(self):
        ctas = ["Узнайте подробности", "Смотрите здесь", "Читать далее", "Подробнее"]
        return f"{random.choice(ctas)}: {random.choice(self.anchors)}"

    def generate_title(self, text):
        words = text.split()
        if len(words) > 5:
            title = ' '.join(random.sample(words, random.randint(1, 5)))
        else:
            title = ' '.join(words)
        return self.sanitize_content(title)

    def get_random_string(self, length=10):
        letters = string.ascii_lowercase
        return ''.join(random.choice(letters) for i in range(length))

    def get_access_token(self):
        short_name = self.get_random_string()
        author_name = self.get_random_string()
        try:
            response = requests.get(f'https://api.telegra.ph/createAccount?short_name={short_name}&author_name={author_name}')
            data = response.json()
            if data.get('ok'):
                self.logger.info(f"Access Token успешно получен: {data['result']['access_token']}")
                return data['result']['access_token']
            else:
                self.logger.error(f"Ошибка получения access token: {data.get('error')}")
                return None
        except Exception as e:
            self.logger.error(f"Ошибка получения access token: {str(e)}")
            return None

    def convert_to_telegraph_format(self, content):
        def process_element(element):
            if isinstance(element, str):
                return element
            elif isinstance(element, dict) and 'tag' in element:
                tag = element['tag']
                attrs = ' '.join(f'{k}="{v}"' for k, v in element.get('attrs', {}).items())
                children = ''.join(process_element(child) for child in element.get('children', []))
                if attrs:
                    return f'<{tag} {attrs}>{children}</{tag}>'
                else:
                    return f'<{tag}>{children}</{tag}>'
            return ''
        
        processed_content = []
        for sentence in content.split('. '):
            if sentence:
                processed_sentence = ''
                i = 0
                while i < len(sentence):
                    if sentence[i] == '<' and i + 1 < len(sentence) and sentence[i + 1] == '{':
                        end_index = sentence.find('>', i)
                        if end_index != -1:
                            json_str = sentence[i+1:end_index]
                            try:
                                json_obj = json.loads(json_str)
                                processed_sentence += process_element(json_obj)
                                i = end_index
                            except json.JSONDecodeError:
                                processed_sentence += sentence[i]
                                i += 1
                        else:
                            processed_sentence += sentence[i]
                            i += 1
                    else:
                        processed_sentence += sentence[i]
                        i += 1
                processed_content.append(processed_sentence)
        
        return '. '.join(processed_content)

    def create_telegraph_page(self, content, proxy):
        try:
            self.logger.debug(f"Попытка создания страницы с контентом: {content[:200]}...")
            
            title = self.generate_title(content)
            
            # Преобразуем контент в нужный формат для Telegraph
            telegraph_content = self.convert_to_telegraph_format(content)
            
            payload = {
                "title": title,
                "author_name": "Anonymous",
                "content": json.dumps([{"tag": "p", "children": [telegraph_content]}], ensure_ascii=False),
                "access_token": self.access_token  # Добавляем токен доступа
            }
            self.logger.debug(f"Тело запроса:\n{json.dumps(payload, indent=2, ensure_ascii=False)}")
            
            start_time = time.time()
            response = requests.post(
                'https://api.telegra.ph/createPage',
                json=payload,
                proxies=proxy if self.use_proxies else None,
                timeout=25
            )
            response_time = time.time() - start_time
            self.logger.debug(f"Статус ответа: {response.status_code}")
            self.logger.debug(f"Время ответа: {response_time:.2f}s")
            self.logger.debug(f"Заголовки ответа: {response.headers}")
            self.logger.debug(f"Полный ответ: {response.text}")
            if response.status_code == 200 and response.json().get("ok"):
                return response.json()
            else:
                self.logger.error(f"Ошибка API Telegraph: {response.text}")
                return None
        except requests.exceptions.RequestException as e:
            self.logger.error(f"Ошибка запроса: {str(e)}")
            if hasattr(e, 'response') and e.response is not None:
                self.logger.error(f"Тело ошибки: {e.response.text}")
            return None

    def publish_article(self, attempt=0):
        try:
            time.sleep(random.uniform(*self.delay_range))
            
            if not self.links:
                self.logger.warning("Все ссылки использованы")
                return None
            link = self.links.pop()
            self.logger.debug(f"Обработка ссылки: {link}")
            base_article = random.choice(self.articles)
            anchor = self.generate_anchor()
            
            clean_article = self.sanitize_content(base_article)
            content = self.insert_link(clean_article, link, anchor)
            proxy = random.choice(self.proxy_pool) if self.proxy_pool else None
            result = self.create_telegraph_page(content, proxy)
            
            if result and result.get('ok'):
                url = result['result']['url']
                self.logger.info(f"Успешно опубликовано: {url}")
                print(f"Опубликована статья: {url}")  # Выводим URL в консоль
                return {
                    'url': url,
                    'token': result['result']['path'],
                    'proxy': proxy['http'] if proxy else 'Без прокси',
                    'content': content,
                    'link': link
                }
            
            if attempt < 2:
                self.logger.warning(f"Повторная попытка ({attempt+1}/3)")
                time.sleep(5)
                return self.publish_article(attempt + 1)
            
            self.logger.error(f"Не удалось опубликовать после 3 попыток | Ссылка: {link}")
            return None
        except Exception as e:
            self.logger.error(f"Критическая ошибка: {str(e)}")
            return None

    def save_results(self):
        try:
            with open('published.csv', 'a', newline='', encoding='utf-8') as f:
                writer = csv.DictWriter(f, fieldnames=[
                    'timestamp', 'url', 'token', 'proxy', 'content', 'link'
                ])
                if f.tell() == 0:
                    writer.writeheader()
                
                for item in self.published:
                    item['timestamp'] = datetime.now().isoformat()
                    writer.writerow(item)
        except Exception as e:
            self.logger.error(f"Ошибка сохранения результатов: {str(e)}")

    def save_remaining_links(self):
        try:
            with open('links.txt', 'w', encoding='utf-8') as f:
                f.write("\n".join(self.links))
        except Exception as e:
            self.logger.error(f"Ошибка сохранения ссылок: {str(e)}")

    def run(self, num_articles):
        print(f"\nНачало публикации {num_articles} статей...")
        try:
            with ThreadPoolExecutor(max_workers=3) as executor:
                futures = [executor.submit(self.publish_article)
                          for _ in range(min(num_articles, len(self.links)))]
                
                for i, future in enumerate(as_completed(futures)):
                    result = future.result()
                    if result:
                        self.published.append(result)
                        print(f"[{i+1}/{num_articles}] Успешно: {result['url']}")
                    else:
                        print(f"[{i+1}/{num_articles}] Ошибка публикации")
            self.save_results()
        except KeyboardInterrupt:
            self.logger.warning("Прервано пользователем")
        finally:
            self.save_remaining_links()
            print("\nСтатистика:")
            print(f"Успешно: {len(self.published)}")
            print(f"Ошибки: {num_articles - len(self.published)}")
            print(f"Осталось ссылок: {len(self.links)}")
            print(f"Логи: debug.log")
            print(f"Результаты: published.csv")

if __name__ == "__main__":
    print("Telegraph Publisher v4.0")
    print("=" * 40)
    
    try:
        num = int(input("Сколько статей создать? "))
        publisher = ArticlePublisher()
        if not publisher.access_token:
            print("Не удалось получить access token. Завершение работы.")
            exit(1)
        publisher.run(num)
    except Exception as e:
        print(f"Критическая ошибка: {str(e)}")
    input("\nНажмите Enter для выхода...")
 
Привет ребята. Написал с помощью ИИ дор на telegra.ph и всё устраивает в принципе. Это заготовка и еще буду дорабатывать. Главное не могу разобраться почему линк получается не анкорный. Спасибо если поможете.
Python:
import os
import random
import csv
import json
import time
import re
import requests
import logging
from datetime import datetime
from urllib.parse import urlparse, unquote
from concurrent.futures import ThreadPoolExecutor, as_completed
from http.client import HTTPConnection
import string

# Включить детальное логирование запросов
HTTPConnection.debuglevel = 1

class ArticlePublisher:
    def __init__(self):
        self.setup_logging()
        self.use_proxies = self.ask_proxy_usage()
        self.proxy_pool = self.load_proxies() if self.use_proxies else []
        self.load_resources()
        self.published = []
        self.delay_range = (30, 60)  # Увеличенная задержка между запросами
        self.access_token = self.get_access_token()  # Получаем токен доступа
        # Настройка логгера для requests
        self.requests_logger = logging.getLogger("urllib3")
        self.requests_logger.setLevel(logging.DEBUG)

    def setup_logging(self):
        logging.basicConfig(
            filename='debug.log',
            level=logging.DEBUG,
            format='%(asctime)s [%(levelname)s] %(message)s',
            datefmt='%Y-%m-%d %H:%M:%S'
        )
        self.logger = logging.getLogger()

    def ask_proxy_usage(self):
        print("\n" + "="*40)
        choice = input("Использовать прокси? (y/n): ").lower()
        return choice == 'y'

    def load_resources(self):
        try:
            with open('articles.txt', 'r', encoding='utf-8') as f:
                self.articles = [line.strip() for line in f]
           
            with open('links.txt', 'r', encoding='utf-8') as f:
                self.links = [unquote(line.strip()) for line in f]  # Декодируем URL
                random.shuffle(self.links)
            with open('anchors.txt', 'r', encoding='utf-8') as f:
                self.anchors = [line.strip() for line in f]
        except Exception as e:
            self.logger.error(f"Ошибка загрузки ресурсов: {str(e)}")
            raise

    def load_proxies(self):
        proxies = []
        try:
            with open('proxies.txt', 'r') as f:
                for line in f:
                    parts = line.strip().split(':')
                    if len(parts) != 4:
                        continue
                    ip, port, user, pwd = parts
                    proxy = {
                        'http': f'socks5://{user}:{pwd}@{ip}:{port}',
                        'https': f'socks5://{user}:{pwd}@{ip}:{port}'
                    }
                    proxies.append(proxy)
            self.logger.debug(f"Загружено прокси: {len(proxies)}")
            return proxies
        except Exception as e:
            self.logger.error(f"Ошибка загрузки прокси: {str(e)}")
            return []

    def sanitize_content(self, text):
        text = re.sub(r'[^\w\s\-.,!?@#$%^&*()+=/:;\'"<>]', '', text)
        return text[:5000]

    def insert_link(self, text, link, anchor):
        sentences = [s for s in text.split('. ') if s]
        if not sentences:
            return text
       
        insert_pos = random.randint(0, len(sentences)-1)
       
        # Генерируем JSON-структуру для ссылки
        link_json = {
            "tag": "a",
            "attrs": {
                "href": link,
                "target": "_blank",
                "rel": "nofollow"
            },
            "children": [anchor]
        }
       
        # Преобразуем JSON-структуру в строку для вставки в текст
        sentences[insert_pos] += f' {json.dumps(link_json, ensure_ascii=False)}'
       
        return '. '.join(sentences)

    def generate_anchor(self):
        ctas = ["Узнайте подробности", "Смотрите здесь", "Читать далее", "Подробнее"]
        return f"{random.choice(ctas)}: {random.choice(self.anchors)}"

    def generate_title(self, text):
        words = text.split()
        if len(words) > 5:
            title = ' '.join(random.sample(words, random.randint(1, 5)))
        else:
            title = ' '.join(words)
        return self.sanitize_content(title)

    def get_random_string(self, length=10):
        letters = string.ascii_lowercase
        return ''.join(random.choice(letters) for i in range(length))

    def get_access_token(self):
        short_name = self.get_random_string()
        author_name = self.get_random_string()
        try:
            response = requests.get(f'https://api.telegra.ph/createAccount?short_name={short_name}&author_name={author_name}')
            data = response.json()
            if data.get('ok'):
                self.logger.info(f"Access Token успешно получен: {data['result']['access_token']}")
                return data['result']['access_token']
            else:
                self.logger.error(f"Ошибка получения access token: {data.get('error')}")
                return None
        except Exception as e:
            self.logger.error(f"Ошибка получения access token: {str(e)}")
            return None

    def convert_to_telegraph_format(self, content):
        def process_element(element):
            if isinstance(element, str):
                return element
            elif isinstance(element, dict) and 'tag' in element:
                tag = element['tag']
                attrs = ' '.join(f'{k}="{v}"' for k, v in element.get('attrs', {}).items())
                children = ''.join(process_element(child) for child in element.get('children', []))
                if attrs:
                    return f'<{tag} {attrs}>{children}</{tag}>'
                else:
                    return f'<{tag}>{children}</{tag}>'
            return ''
       
        processed_content = []
        for sentence in content.split('. '):
            if sentence:
                processed_sentence = ''
                i = 0
                while i < len(sentence):
                    if sentence[i] == '<' and i + 1 < len(sentence) and sentence[i + 1] == '{':
                        end_index = sentence.find('>', i)
                        if end_index != -1:
                            json_str = sentence[i+1:end_index]
                            try:
                                json_obj = json.loads(json_str)
                                processed_sentence += process_element(json_obj)
                                i = end_index
                            except json.JSONDecodeError:
                                processed_sentence += sentence[i]
                                i += 1
                        else:
                            processed_sentence += sentence[i]
                            i += 1
                    else:
                        processed_sentence += sentence[i]
                        i += 1
                processed_content.append(processed_sentence)
       
        return '. '.join(processed_content)

    def create_telegraph_page(self, content, proxy):
        try:
            self.logger.debug(f"Попытка создания страницы с контентом: {content[:200]}...")
           
            title = self.generate_title(content)
           
            # Преобразуем контент в нужный формат для Telegraph
            telegraph_content = self.convert_to_telegraph_format(content)
           
            payload = {
                "title": title,
                "author_name": "Anonymous",
                "content": json.dumps([{"tag": "p", "children": [telegraph_content]}], ensure_ascii=False),
                "access_token": self.access_token  # Добавляем токен доступа
            }
            self.logger.debug(f"Тело запроса:\n{json.dumps(payload, indent=2, ensure_ascii=False)}")
           
            start_time = time.time()
            response = requests.post(
                'https://api.telegra.ph/createPage',
                json=payload,
                proxies=proxy if self.use_proxies else None,
                timeout=25
            )
            response_time = time.time() - start_time
            self.logger.debug(f"Статус ответа: {response.status_code}")
            self.logger.debug(f"Время ответа: {response_time:.2f}s")
            self.logger.debug(f"Заголовки ответа: {response.headers}")
            self.logger.debug(f"Полный ответ: {response.text}")
            if response.status_code == 200 and response.json().get("ok"):
                return response.json()
            else:
                self.logger.error(f"Ошибка API Telegraph: {response.text}")
                return None
        except requests.exceptions.RequestException as e:
            self.logger.error(f"Ошибка запроса: {str(e)}")
            if hasattr(e, 'response') and e.response is not None:
                self.logger.error(f"Тело ошибки: {e.response.text}")
            return None

    def publish_article(self, attempt=0):
        try:
            time.sleep(random.uniform(*self.delay_range))
           
            if not self.links:
                self.logger.warning("Все ссылки использованы")
                return None
            link = self.links.pop()
            self.logger.debug(f"Обработка ссылки: {link}")
            base_article = random.choice(self.articles)
            anchor = self.generate_anchor()
           
            clean_article = self.sanitize_content(base_article)
            content = self.insert_link(clean_article, link, anchor)
            proxy = random.choice(self.proxy_pool) if self.proxy_pool else None
            result = self.create_telegraph_page(content, proxy)
           
            if result and result.get('ok'):
                url = result['result']['url']
                self.logger.info(f"Успешно опубликовано: {url}")
                print(f"Опубликована статья: {url}")  # Выводим URL в консоль
                return {
                    'url': url,
                    'token': result['result']['path'],
                    'proxy': proxy['http'] if proxy else 'Без прокси',
                    'content': content,
                    'link': link
                }
           
            if attempt < 2:
                self.logger.warning(f"Повторная попытка ({attempt+1}/3)")
                time.sleep(5)
                return self.publish_article(attempt + 1)
           
            self.logger.error(f"Не удалось опубликовать после 3 попыток | Ссылка: {link}")
            return None
        except Exception as e:
            self.logger.error(f"Критическая ошибка: {str(e)}")
            return None

    def save_results(self):
        try:
            with open('published.csv', 'a', newline='', encoding='utf-8') as f:
                writer = csv.DictWriter(f, fieldnames=[
                    'timestamp', 'url', 'token', 'proxy', 'content', 'link'
                ])
                if f.tell() == 0:
                    writer.writeheader()
               
                for item in self.published:
                    item['timestamp'] = datetime.now().isoformat()
                    writer.writerow(item)
        except Exception as e:
            self.logger.error(f"Ошибка сохранения результатов: {str(e)}")

    def save_remaining_links(self):
        try:
            with open('links.txt', 'w', encoding='utf-8') as f:
                f.write("\n".join(self.links))
        except Exception as e:
            self.logger.error(f"Ошибка сохранения ссылок: {str(e)}")

    def run(self, num_articles):
        print(f"\nНачало публикации {num_articles} статей...")
        try:
            with ThreadPoolExecutor(max_workers=3) as executor:
                futures = [executor.submit(self.publish_article)
                          for _ in range(min(num_articles, len(self.links)))]
               
                for i, future in enumerate(as_completed(futures)):
                    result = future.result()
                    if result:
                        self.published.append(result)
                        print(f"[{i+1}/{num_articles}] Успешно: {result['url']}")
                    else:
                        print(f"[{i+1}/{num_articles}] Ошибка публикации")
            self.save_results()
        except KeyboardInterrupt:
            self.logger.warning("Прервано пользователем")
        finally:
            self.save_remaining_links()
            print("\nСтатистика:")
            print(f"Успешно: {len(self.published)}")
            print(f"Ошибки: {num_articles - len(self.published)}")
            print(f"Осталось ссылок: {len(self.links)}")
            print(f"Логи: debug.log")
            print(f"Результаты: published.csv")

if __name__ == "__main__":
    print("Telegraph Publisher v4.0")
    print("=" * 40)
   
    try:
        num = int(input("Сколько статей создать? "))
        publisher = ArticlePublisher()
        if not publisher.access_token:
            print("Не удалось получить access token. Завершение работы.")
            exit(1)
        publisher.run(num)
    except Exception as e:
        print(f"Критическая ошибка: {str(e)}")
    input("\nНажмите Enter для выхода...")
В общем долго и упорно ковырялся напару с ИИ и вот что нужно было сделать цитирую "
Формирование контента для Telegraph API : теперь контент передается в виде массива узлов, а не простой строки с HTML-кодом.
"
Готовый код не буду скидывать там всякое лично мое и тд. Кто захочет полный нормальный код с нормальными анкор ссылками просто скопируйте код и скажите ИИ чтоб контент передавался в виде массива узлов, а не простой строки с HTML-кодом. Писал код тут
 
В общем долго и упорно ковырялся напару с ИИ и вот что нужно было сделать цитирую "
Формирование контента для Telegraph API : теперь контент передается в виде массива узлов, а не простой строки с HTML-кодом.
"
Готовый код не буду скидывать там всякое лично мое и тд. Кто захочет полный нормальный код с нормальными анкор ссылками просто скопируйте код и скажите ИИ чтоб контент передавался в виде массива узлов, а не простой строки с HTML-кодом. Писал код тут
У телеграфа есть своя либа с аутентификацией по токену

Лимит 65к символов вроде, я писал аплоадер для хранения пейлоада хексом на нескольких страницах, затем сохранение ссылок на еще одной страницы, а также парсер для этого на си
 
вот, писал в начале прошого года
 

Вложения

  • telegraph.zip
    2.1 КБ · Просмотры: 24
Всем привет!
Кто поможет?
Я ищу (книги, онлайн-курсы, статьи) для изучения асинхронного программирования. Буду признателен за любой ответ!

P.S. В Python 4 месяца, крупных проектов еще не делал, но собираюсь ближе к лету реализовать что-то интересное. Читая статьи на Хабре, заметил, что некоторые люди говорят, что лучше выучить асинхронное программирование будучи новичком стоит его учить или как?.
 
Всем привет!
Кто поможет?
Я ищу (книги, онлайн-курсы, статьи) для изучения асинхронного программирования. Буду признателен за любой ответ!

P.S. В Python 4 месяца, крупных проектов еще не делал, но собираюсь ближе к лету реализовать что-то интересное. Читая статьи на Хабре, заметил, что некоторые люди говорят, что лучше выучить асинхронное программирование будучи новичком стоит его учить или как?.
Этот курс предназначен для глубокого понимания темы. Нужно оно тебе или нет - хз, зависит от того что ты хочешь реализовывать.
 
Этот курс предназначен для глубокого понимания темы. Нужно оно тебе или нет - хз, зависит от того что ты хочешь реализовывать.
Спасибо
 
Здравствуйте, мне нужна помощь в своем скрипте я использую pyautogui для работы с тдатой, но действия выводятся на экран. Как мне сделать чтоб скрипт работал с тдатой не выводя на экран пользователю?
 
Здравствуйте, мне нужна помощь в своем скрипте я использую pyautogui для работы с тдатой, но действия выводятся на экран. Как мне сделать чтоб скрипт работал с тдатой не выводя на экран пользователю?
На линуксе вроде бы так
Python:
pyautogui.FAILSAFE = False 
pyautogui.PAUSE = 0.1
потом виртуальный дисплей настроить
 
На линуксе вроде бы так
Python:
pyautogui.FAILSAFE = False
pyautogui.PAUSE = 0.1
потом виртуальный дисплей настроить
Спасибо, но мне нужно на винду(
 
Есть антик marketerbrowser (анлим версия про) в нем есть api в котором я не разобрался, разраб китаец и мои вопросы он игнорит. На просторах интернета практически нет информации по работе с api. ИИ тоже не смог осилить задачу. Задача автоматизация.
Есть много аккаунтов гугл задача войти в каждый и прописать определенные действия.
В этот антик встроенный браузер Chrome.Рассматриваю 2 библиотеки python это playwright и pyautogui.
В какой проще автоматизацию в моем случае реализовать?, я только про эти 2 библиотеки слышал может и еще что -то есть. А может и python тут сам по себе не удобен.
 
Спасибо, но мне нужно на винду(
на винде еще проще

Python:
from pywinauto import *
app = Application(backend="uia").start("notepad.exe")
app.UntitledNotepad.type_keys("hello world", with_spaces=True)
 
Всем привет, хотелось бы изучить питон под тематику форума(чекеры,боты и все подобное)
интересно бы было почитать какой нибудь курс или ещё что-то, буду благодарен за ответы!
 
Всем привет, хотелось бы изучить питон под тематику форума(чекеры,боты и все подобное)
интересно бы было почитать какой нибудь курс или ещё что-то, буду благодарен за ответы!
начни писать парсеры
 
Всем привет, хотелось бы изучить питон под тематику форума(чекеры,боты и все подобное)
интересно бы было почитать какой нибудь курс или ещё что-то, буду благодарен за ответы!
Для изучения -
https://stepik.org/course/180964/syllabus - курс по питону, в котором практически нету задач чтобы зависнуть на 10 часов, для начала норм
https://stepik.org/course/63085/syllabus - потом сюда
 
Всем привет, посоветуйте хорошие библиотеки python для изменения голоса. Например с муж. на жен и наоборот. Важно что бы голос был чистым и сохранял темп речи вместе с возможными акцентами и манерой речи. Проще говоря нужна библиотека которая отлично работает с голосом, а не с текстом.
 
Всем привет, посоветуйте хорошие библиотеки python для изменения голоса. Например с муж. на жен и наоборот. Важно что бы голос был чистым и сохранял темп речи вместе с возможными акцентами и манерой речи. Проще говоря нужна библиотека которая отлично работает с голосом, а не с текстом.
Вам на входе нужен голос или текст?
Если текст, то вот:

Пример кода работы либы:

Python:
import pyttsx3

# Инициализация движка
engine = pyttsx3.init()

# Получение списка доступных голосов
voices = engine.getProperty('voices')

# Установка женского голоса (voices[1] - индекс может варьироваться)
engine.setProperty('voice', voices[1].id)

# Синтез речи
engine.say("Привет, это женский голос")
engine.runAndWait()

Если на входе голос мужской, а на выходе женский. То только через морфинг или нейронки (можно поискать на https://huggingface.co - вставил нужный фильтр в линк для поиска audio-to-audio)
По морфингу была такая либа (еще вроде есть, искать лень):
 
Последнее редактирование:


Напишите ответ...
  • Вставить:
Прикрепить файлы
Верх