elemento web de Python para enviar texto y usar el archivo abierto txt
Quiero convertir el elemento de un elemento web a una cadena y enviarlo a otra función y usarlo en el nombre del archivo. Probé muchos métodos pero fallé. Estoy buscando ideas sobre cómo hacerlo. debajo de mis códigos.
product_title = None
def product_title():
global product_title
product_title = driver.find_element(By.CSS_SELECTOR, "#GoodsBlock > table > tbody > tr:nth-child(1) > td.product-title > div > a")
print(product_title.text)
product_title.click()
def write_txt():
file = open("games_files/"+product_title+".txt", "w")
product_title()
write_txt()
y error
Traceback (most recent call last):
File "D:\python\xbox\pythonProject\scrap_games.py", line 48, in <module>
write_txt()
File "D:\python\xbox\pythonProject\scrap_games.py", line 41, in write_txt
file = open("games_files/"+product_title.text+".txt", "w")
^^^^^^^^^^^^^^^^^^
Probé muchos métodos pero fallé. Estoy buscando ideas sobre cómo hacerlo.
No he usado mucho Selenium, pero esto debería solucionar el problema. En lugar de usar global y +
cadenas, cambiar a return y f-string ayuda a mover la información entre definiciones. Este es el problema principal ya que su código no configura la product_title
variable.
Intentar:
def get_product_title():
product_title = driver.find_element(By.CSS_SELECTOR, "#GoodsBlock > table > tbody > tr:nth-child(1) > td.product-title > div > a")
print(product_title.text)
product_title.click()
return product_title.text
def write_txt():
file = open(f"games_files/{product_title}.txt", "w")
product_title = get_product_title()
write_txt()
Cambié el nombre de la definición para que sea más claro y pueda ayudar a desglosar mi respuesta. product_title
obtiene el valor devuelto de product_title.text
from get_product_title
, de su comentario esto contiene el valor que desea. Esto evita tener que preocuparse por global
entrar en su defensa.
write_txt
ahora tiene una cadena f que inserta la variable product_title
sin la necesidad de +
's.
EDITAR: versión de eliminación de emoji
Basado en respuestas de aquí: https://stackoverflow.com/a/50602709/22669764
EDITAR #2: Envolvió el product_title.text
in str
y lo convirtió en una variable en caso de que product_title.click()
haga algo con el valor. Se agregó lstrip
y, rstrip
con suerte, para mitigar las cosas que matan a los emoji.
Instalar paquete emoji conpip install emoji
import emoji
def get_product_title():
product_title = driver.find_element(By.CSS_SELECTOR, "#GoodsBlock > table > tbody > tr:nth-child(1) > td.product-title > div > a")
title = str(product_title.text)
print(title)
product_title.click()
return title
def give_emoji_free_text(text):
return str(emoji.replace_emoji(text, replace='')).lstrip().rstrip()
def write_txt():
file = open(f"games_files/{clean_title}.txt", "w")
product_title = get_product_title()
clean_title = give_emoji_free_text(product_title)
write_txt()
Espero que te sirva. Si es así, vota y márcalo como respondido.