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)
“`
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:
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.