Recomendados: [Música] [Ciencia] [Religión y Espiritualidad]

[Volver] [Catálogo] [★]
Estás en el hilo 92035 de /t/.
Título  
Opciones
Post
Archivo URL
Pass  (Para eliminar tu post, opcional)
Lee las Reglas antes de participar.
Lee las Reglas antes de participar.
Tipos de archivo: GIF, JPG, MP3, MP4, OGG, PDF, PNG, SWF, WEBM . Tamaño máximo: 24 MB.
En este tablón puedes publicar código con [code].

Tenemos problemas con Bitmi, favor de tener paciencia
Yurei Screen; Edición Hololive


No abuses de los hilos de consultas técnicas. Trata de aportar contenido, opiniones, experiencias, recursos, en lugar de pedirlos.
Si quieres colaborar con el desarrollo de Hispachan, tienes toda la información en esta página.

Dumper de imagenes
[A]
163116392939.png [S] ( 237.93KB , 675x1073 , dciws59-f1ef7d6...png )
92035 Dumper de imagenes
Anónimo

/#/ 92035 []

En este hilo planeo probar y desarrollar un dumpeador de imagenes que comenzo en un hilo sobre contenido archivado de ac en >>/ac/164369. Esta escrito en python 3.9 y utiliza la libreria requests, por ahora solo es el script para dumpear archivos y la ¿api?
https://pastebin.com/dV2Akb8N dumper.py
https://pastebin.com/248jw2ak hemuhi.py

El siguiente paso seria desarrollar una gui para hacer mas facil su uso.

Acepto quejas y sugerencias, si alguien tiene una duda o problema tratare de responderlo.

>> Anónimo /#/ 92037 [X]
>>92035 (OP)
Está bien pero click es superior a argparse y cualquier otra lib para programas de línea de comandos. Te permite escribir código mucho más organizado.

>> Anónimo /#/ 92038 [X]
163116632764.png [S] ( 8.94KB , 1173x252 , pey.png )
92038
>>/ac/176893

>> Anónimo /#/ 92039 [X]
>>92037
Otras dos observaciones:
Ya que estás usando python 3.9, usa fstrings en lugar de separar por comas. Con los fstrings incluso puedes evaluar expresiones dentro de las cadenas. Ejemplo:

nombre = "Anon"
print(f"Tu nombre es {nombre}") # esto imprime "Tu nombre es Anon"

edad = 18
print(f"{'Tienes permitido postear' if edad >= 18 else 'Vuelve cuando tengas 18'}")

La otra observación es que en tu archivo con la función principal coloques el shebang correspondiente si tu proyecto será libre de código abierto, ya que hay desarrolladores que usan sistemas Unix y directamente chmodean para testear el programa. Básicamente añade esto en tu primer línea, antes de "coding utf-8":
#!/usr/bin/env python3

>> Anónimo /#/ 92040 [X]
>>92038
Porque el script que estás intentando ejecutar no está en tu working directory (o el equivalente a ese término en windows)

>> Anónimo /#/ 92041 [X]
>>92040
Como lo soluciono?

>> Anónimo /#/ 92044 [X]
>>92041
Ruta relativa en la misma carpeta o lo colocas en el $PATH. Personalmente yo tengo mis estupideces en una carpeta llamada .local/bin dentro de C:/Users/Retrasado/ extraño linsus :^(

>> Anónimo /#/ 92056 [X]
>>92041
En lugar de ejecutar

python archivo.py

Utiliza

python /ruta/al/archivo.py

O cambia tu working directory con el comando cd o lo que sea que tengan en el muy pobre toolchain que tiene windows.
>>92044
Gimnasia mental

>> Anónimo /#/ 92063 [X]
>>92044
>Ruta relativa en la misma carpeta o lo colocas en el $PATH
Como hago esto?

>> Anónimo /#/ 92076 [X]
>>92063
La puta madre, que ese no es el error que tienes, zopenco ¿los windoseros siquiera saben lo que es PATH o lo que es una variable de entorno?
Python ya lo tienes en PATH, de lo contrario tendrías que ejecutar "python.exe" en lugar de solo escribir el comando "python".
El error es que el directorio desde el que estás ejecutando el comando no contiene el archivo "dumper.py". La solución es tan simple como que navegues desde la consola al directorio donde tienes ese archivo o escribas la ruta completa de éste en el comando, de nuevo ejemplifico:

python C:\Users\OPuto\Carpeta\Donde\Esta\dumper.py

Ahora que si el shell de winblows cambió su forma de funcionar tan retardada que tiene puede que el error si sea PATH, en cuyo caso basta buscar en tu menú "editar variables de entorno", abres el programa y añades una variable que se llame PATH, con el valor C:\Users\Ruta\De\python.exe, en caso de que la variable ya exista y tenga algún valor solo añade la ruta de python separandola del resto de rutas con un punto y coma así: C:\Users\Valor\Que\Ya\Estaba;C:\Users\Ruta\A\Python

>> Anónimo /#/ 92079 [X]
163124433891.jpg [S] ( 43.48KB , 608x991 , nope_cup_annoyed.jpg )
92079
>>92063
La opción más fácil que tienes es que simplemente muevas TODOS los archivos .py que tengas en una sola carpeta, abras una temrinal que esté parada exactamente en esa carpeta, y los llames desde ahí.
Tu otra opción (más laboriosa pero sencilla también) es agarrar la ruta de esa misma carpeta con tus .py y agregarla a tu PATH (muy overkill para lo que te interesa de momento, aunque podría ser conveniente después).
>>92056
>>92076
>Gimnasia mental
oh, espera... esa cosa mágica que permite entre otras cosas localizar ejecutables, ¿cómo es que se llamaba? OH SÍ!! ¿Creo que empezaba con PATH? ¿y qué son esas cosas que se puede EJECUTAR utilizando el intérprete de Python? Cielos, se me olvidó, creo que empezaban en .py. Misterios de la vida, ¿no?

>> Anónimo /#/ 92081 [X]
>>92079
Analiza bien la imágen idiota.
El error no es que el comando "python" no es reconocido, sino que el archivo dumper.py no existe. Te dejo el resto de la lógica a ti kek.
No niego al 100% que el error sea de PATH puesto que windows tiene una shell de mierda ultralimitada que no tiene sentido, pero la probabilidad de que sea error de variable de entorno es menor.

>> Anónimo /#/ 92083 [X]
>>92079
Pero explica bien cabronazo
>>92081
Cuando le pasas argumentos al ejecutable de Python en Windows, este (no la mierda de shell) utiliza intermanete el PATH de Windows para buscar archivos .py qué ejecutar. Dicho sea, también existe una variable extra que el intérprete usa para hacer esa misma búsqueda llamado PYTHONPATH, esa sería la que uno buscaría editar más libetalmente, para no jugar a la cuerda floja con el PATH, especialmente en Windows.
https://docs.python.org/3/using/cmdline.html#envvar-PYTHONPATH
Así que Opene, haz lo de poner todo en un mismo lugar y llamar los archivos desee ahí o pon la ruta de tu carpeta en PYTHONPATH.

>> Anónimo /#/ 92136 [X]
Soy el anon que está trabajando en el bot armado en Selenium, he estado trabajando en pulir las eventualidades, o sea, que el programa sepa responder en caso de que salga un mensaje de "demasiados posts en cola" o un bitmiti; por lo pronto me ha funcionado bien, el problema son los tiempos de espera, o sea ¿cuánto tiempo debe esperar el programa desde que postea para recibir y jalar el mensaje que confirme que ha recibido el post? he estado viendo métodos para verificar si una página ha cambiado en Selenium pero por lo pronto no he encontrado una solución que se acomode lo suficiente a mi problema. Ya veré qué puedo hacer, pero por lo pronto he avanzado bastante.

>> Anónimo /#/ 92217 [X]
163151531089.png [S] ( 245.15KB , 822x935 , basico.png )
92217
Esta no es la primera vez que lo intento

>> Anónimo /#/ 92218 [X]
163151533375.jpg [S] ( 77.97KB , 611x917 , expectativas.jpg )
92218
>>92217
Esperaba mas de esta serie

>> Anónimo /#/ 92219 [X]
163151535617.jpg [S] ( 40.03KB , 342x514 , horrible.jpg )
92219
>>92218
Ella es anne

>> Anónimo /#/ 92220 [X]
163151538441.png [S] ( 85.60KB , 168x564 , 20-luz.png )
92220
>>92219
4/4 imagenes posteadas exitosamente

>> Anónimo /#/ 92221 [X]
>>92037
>>92039
Gracias por la sugerencia, sobre todo por click.

>>92136
Podrías intentar verificar el campo current_url del driver cada tantos segundos para ver si ya cambio y continuar con la siguiente imagen, algo asi como:


...
for post in postlist:
send_post(post) # mandar el post
while driver.current_url == thread_url:
# el bucle continua hasta que la url cambie
wait(2)

if driver.current_url == board_url:
...
else:
...


Pero mejor usa WebDriverWait de selenium
https://selenium-python.readthedocs.io/waits.html

...
waiter = WebDriverWait(driver, 20)
# Espera hasta un maximo de 20 segundos que se
# cumpla una condicion para driver
for post in postlist:
send_post(post) # mandar el post
try:
waiter.until(driver.current_url == board_url)
# esperar hasta que cambie la url
print('Posteado con exito')
except TimeoutException:
... #Se agtaron los 20 seguntos


Lo saque de stackoverflow

>> Anónimo /#/ 92232 [X]
>>92221
Ya lo resolví. Mi solución es algo callampera pero el pseudocódigo es algo así

presionar_botones()
titulo=titulo_de_la_pagina()
hacer{
esperar(0.1 segundos)
titulo2=titulo_de_la_pagina()
}mientras(titulo!=titulo2)

Básicamente lo que hace es primero realizar los clicks en la página, jala el título y detiene el programa; va jalando el título nuevamente y lo guarda en una nueva variable cada 0.1 segundos. El programa prosigue cuando dicho título nuevo es diferente que el que obtuvo en un inicio, evidenciando que se encuentra en una página diferente. Es una cagada el Selenium, no tiene opción para chequear la respuesta de la página para verificar que en efecto se ha ingresado a la página y ahora puede realizar los clicks automáticos por lo que tuve que guiarme por los títulos que devuelve, cosa que personalmente encuentro tedioso de hacer (pues tengo que andar forzando errores de la página para saber qué sale en el título), pero en fin, me las arreglé para pasar por encima de eso, ya tengo la mayoría de eventualidades cubiertas, lo único que falta es
>un mensaje de error en caso de que el poster esté baneado
>un mensaje de error en caso de que haya una palabra detectada por el filtro en el nombre del archivo
Pero la verdad encuentro que eso ya sería complicar el código metiendo cosas que no sumen, preparar el programa para error de cola saturada, archivo repetido y bitmiti ya resuelve la mayoría de problemas que podrían surgir mientras uno hace un dump.

Por cierto, algo nuevo que agregué a mi programa que no había en el viejo HispachanMU es la posibilidad de insistir en caso de que la cola esté llena o en caso de que la página esté devolviendo 404; antes si saltaba cola llena, MU simplemente rebotaba error y saltaba a la siguiente imagen (cosa que se volvía bastante molesto cuando uno posteaba cómics), con mi código el programa sigue insistiendo con la misma imagen hasta que logre postearlo o hasta que supere una cantidad máxima de intentos (yo le puse cinco, pero se puede ajustar fácilmente). También por la manera que programé los periodos de espera el dumper toma la cantidad de tiempo que cada imagen toma en ser posteada, mientras que el viejo HispachanMU demoraba una cantidad constante de tiempo antes de pasar a otra imagen, cosa que ahorra mucho tiempo.

>>92217
¿Añadiste la posibilidad de adjuntar texto en los posteos automáticos? tenía pensado hacer algo así, pero luego tenía que agregar que el programa responda en caso de que el texto tuviera spam o errores ortográficos y también tendría que agregar una interfaz de usuario que luzca parecido al panel de posteo de hispa, y luego tendría que ver como agregar imágenes manualmente en lugar de solo tirar la ruta de una carpeta... bah, que flojera.

>> Anónimo /#/ 92242 [X]
163156970917.png [S] ( 358.76KB , 647x720 , 160772230757.png )
92242
>>92232
>¿Añadiste la posibilidad de adjuntar texto en los posteos automáticos?
Algo así, el script tiene un modo interactivo para que el usuario ingrese manualmente la ruta del archivo y el mensaje asociado al archivo.

>tenía pensado hacer algo así, pero luego tenía que agregar que el programa responda en caso de que el texto tuviera spam o errores ortográficos y también tendría que agregar una interfaz
En mi opinion, basta con que muestre el mensaje de error y quiza permitirle editar el mensaje, esperar unos segundos o abortar.

>> Anónimo /#/ 92247 [X]
>>92242
>basta con que muestre el mensaje de error y quiza permitirle editar el mensaje, esperar unos segundos o abortar.
Nah, qué flojera
¿Con qué programa hago las interfaces? hace algunos meses estaba usando tkinter pero tengo opiniones mixtas, luce demasiado acartonado en mi opinión. También encontré una librería que conecta Python con un archivo html de tal manera que se puede usar como UI, pero nunca pude hacer que funcionara.

>> Anónimo /#/ 92249 [X]
>>92247
¿Eel es llibreria de guis html con python a la que te refieres?

Yo estaba haciendo una gui con tkinter porque ya venia instalado junto a python, me frustre por no saber acomodar los elementos de la forma que queria y luego instale pysimple gui pero era demasiado simple, tambien podrias usar pyqt o kivy. Realmente no tengo ni idea sobre el desarrollo de guis.

>> Anónimo /#/ 92271 [X]
>>92249
>¿Eel es llibreria de guis html con python a la que te refieres?
Creo que si. El punto es que no lo pude hacer funcionar. La verdad no estoy emocionado por meterle UI, en mi corta experiencia programando me he dado cuenta que la mayor parte del esfuerzo se va a programar cosas triviales. Odio andar leyendo documentación de librerías enteras solo para poner un puto mensaje de OK en la pantalla.

>> Anónimo /#/ 92279 [X]
>>92247
PyQt5 o PyGTK.
Las demás libs gráficas que tiene python son basura.

>> Anónimo /#/ 92386 [X]
OP ¿podrías hacer un paso a paso de cómo hacer funcionar tu script a través de video o imágenes? Soy nuevo en esto.

>> Anónimo /#/ 92390 [X]
>>92386
Entendido, espero tener algo para el fin de semana.

>> Anónimo /#/ 92391 [X]
>>92390
Gracias.

>> Anónimo /#/ 92764 [X]
¿Alguien sabe a donde puedo subir los archivos?

>>92391
Lo siento, no pude tenerlo listo pero espero terminarla mañana.

>> Anónimo /#/ 92819 [X]
163237511022.jpg [S] ( 405.32KB , 1920x1080 , Lebanon.jpg )
92819
>>92764
Voy a subir el zip a anonfiles: https://anonfiles.com/t5s7jbJ7ue/hemuhi-3-0_zip

Si quieres puedes crear la variable PYTHONPATH o agregar la ruta en donde se encuentra el dumper a la variable como lo menciona >>92083, para hacerlo: ve a las variables del entorno (https://answers.microsoft.com/es-es/windows/forum/all/windows-10-variables-de-entorno-windows-10-version/703ea5fa-1db4-46da-8ff7-6261140bf58b) y crea una nueva variable de usuario con el nombre PYTHONPATH, luego le agregas la ruta del dumper.

El proceso básico es:

Descomprime el archivo
Abre el simbolo del sistema
Cambia el directorio a la ruta en donde descomprimiste los archivos
>cd C:/users/anon/hemuhi

Instala los modulos necesarios con
>py -m pip install -r requirements.txt

Para ejecutar el dumper utiliza este comando, recuerda que antes tienes que estar en la ruta en donde se encuentra el script
>py dumper.py C:/users/anon/comic-para-ac/ -i -m
"-i" inicia el proceso interactivo, te pregunta las opciones por la linea de comandos
"-m" es para ingresar los mensajes manualmente

También puedes utilizarlo así
>py dumper.py C:/users/anon/imagenes-a-dumpear/ -r /ac/1234 -t 5 12 -s -q -p -d 8 -m

>-r /ac/1234
Indica postear en el hilo 1234 de ac
>-t 5 12
Realizar 5 intentos por post y esperar 12 segundos en cada intento
>-s
Postear con sage
>-q
Agregar una cita al post anterior al inicio del mensaje de los posts
>-p
Postear con spoiler
>-d 8
Esperar 8 segundos entre cada post
>-m
Es para ingresar manualmente los mensajes de los posts, si no se encuentra esta opción los mensajes tienen el formato [numero de post]/[posts totales]: 1/9, 2/9, 3/9, ...

Recuerda tener cuidado porque el programa aun tiene bugs y temo que algo pueda salir mal, aunque en las pocas pruebas que realice lo peor que paso fue que me salio un mensaje de "Error de transmisión del archivo" por parte de hispa.


Eliminar hilos/posts
Reportar un hilo/post
[Volver] [Catálogo] [★]