如何使用Python Selenium从按钮提取信息构造订单详情URL
核心问题原因
你定位到的「View Details」是<div>标签而非<a>链接标签,本身不携带href属性,所以调用get_attribute('href')只能拿到空值。这类按钮一般通过绑定JS点击事件触发跳转,无需硬构造URL,直接模拟点击即可实现自动抓取。
方案1:直接循环模拟点击(推荐,无需构造URL)
该方案不需要找订单ID拼接地址,直接模拟人工点击操作,处理完详情页后退到列表页即可,注意要处理元素失效、页面加载等待的问题,示例代码如下:
from selenium import webdriver from selenium.webdriver.common.by import By from selenium.webdriver.support.ui import WebDriverWait from selenium.webdriver.support import expected_conditions as EC import pandas as pd import time driver = webdriver.Chrome('path/chromedriver.exe') driver.get("https://www.URL.COM") # 显式等待设置10秒超时,避免元素未加载完成报错 wait = WebDriverWait(driver, 10) # 先获取订单总数量 order_btns = wait.until(EC.presence_of_all_elements_located((By.CSS_SELECTOR, ".css-901oao.css-bfa6kz.r-tdq03u.r-1oke55r.r-1b43r93.r-majxgm"))) order_count = len(order_btns) orders_detail = [] for i in range(order_count): # 每次重新获取按钮,避免页面刷新后元素失效报错StaleElementReferenceException current_btn = wait.until(EC.presence_of_all_elements_located((By.CSS_SELECTOR, ".css-901oao.css-bfa6kz.r-tdq03u.r-1oke55r.r-1b43r93.r-majxgm")))[i] current_btn.click() # 等待详情页加载完成,替换成你详情页独有的元素CSS选择器即可 wait.until(EC.presence_of_element_located((By.CSS_SELECTOR, "详情页特有元素的CSS选择器"))) # 此处写详情页字段提取逻辑,存入字典 detail_dict = {} # 示例:detail_dict['order_number'] = driver.find_element(By.CSS_SELECTOR, '.order-num').text orders_detail.append(detail_dict) # 处理详情页跳转逻辑二选一: # 情况1:点击按钮在原页面跳转,直接后退到列表页 driver.back() # 情况2:点击按钮新开标签页,用下面的代码替换上面的driver.back() # windows = driver.window_handles # driver.close() # 关闭当前详情页 # driver.switch_to.window(windows[0]) # 切回列表页 # 等待列表页按钮重新加载完成 wait.until(EC.presence_of_all_elements_located((By.CSS_SELECTOR, ".css-901oao.css-bfa6kz.r-tdq03u.r-1oke55r.r-1b43r93.r-majxgm"))) # 可加短延迟避免触发反爬 time.sleep(1) # 最终转成DataFrame df = pd.DataFrame(orders_detail)
方案2:构造URL批量抓取
如果你需要先收集所有详情页URL再统一抓取,可以通过以下方式获取订单ID拼接地址:
- 查看订单列表中每个订单的外层DOM元素,是否存在
data-order-id、data-id类的自定义属性,属性值就是你预期URL中的两段数字ID - 提取到对应ID后直接拼接为
f"xyz.com/account/orders/{order_id}/{sub_id}"即可
内容的提问来源于stack exchange,提问作者ViSa
相关产品推荐
相关产品推荐

