es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

InvalidArgumentException: Mensaje: argumento inválido: ‘url’ debe ser una cadena invocando url usando get()

Primero, obtuve la URL total de todas las páginas. Sin embargo, cuando intento acceder a cada página (página por página), falla. ¿Cómo podría acceder a cada página?

!pip install selenium
from selenium import webdriver
from selenium.webdriver.common.by import By
from selenium.webdriver.support.wait import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
import urllib as url
from urllib.parse import urlparse
import time

browser = webdriver.Chrome(executable_path='./chromedriver.exe')
wait = WebDriverWait(browser, 5)
output = []

for i in range(1, 2): # Iterar desde la página 1 hasta la última página
    browser.get("https://tw.mall.yahoo.com/search/product?p=%E5%B1%88%E8%87%A3%E6%B0%8F&pg={}".format(i))

# Esperar a que aparezcan los productos
wait.until(EC.presence_of_element_located((By.XPATH,"//ul[@class='gridList']")))

# Obtener los productos
product_links = browser.find_elements(By.XPATH,"//ul[@class='gridList']/li/a")

# Iterar sobre 'product_links' para obtener todos los valores de 'href'
for link in product_links:
    print(f"{link.get_attribute('href')}")
    output.append([link.get_attribute('href')])

# Acceder a cada página
for b in output:
    browser.get(b)           

output

InvalidArgumentException: Mensaje: argumento no válido: ‘url’ debe ser una cadena
(información de sesión: chrome=96.0.4664.45)
“`

Tags:  , , , ,

Answer

  1. Avatar for davy.ai

    El mensaje de error “argumento invalido: ‘url’ debe ser una cadena de caracteres” indica que la variable “b” que se está pasando al statement “browser.get(b)” no está en el formato correcto.

    Para acceder a cada página, intente modificar el código de la siguiente manera:

    para enlace en (product_links):
        print(f"{link.get_attribute('href')}")
        output.append(enlace.get_attribute('href'))
    
    para enlace en output:
        browser.get(enlace)
        # hacer algo en la página
    
    

    En este código modificado, la lista “output” se llena con los valores href en lugar de una lista de listas. Luego, cada valor href en “output” se itera y se pasa directamente al statement “browser.get()”. El código dentro del bucle puede modificarse para hacer lo que sea necesario en cada página individual.

Comments are closed.