Playwright Python无法定位select标签并切换分页选项求助
解决Playwright切换每页产品数后获取不到全部链接的问题
问题诊断
- 选择器错误:页面select的id是
prodPerPageSelTop,但代码中多次使用prodperpageselect(大小写错误+拼写偏差),导致无法正确定位元素 - 等待逻辑混乱:提前执行的等待函数和后续操作不匹配,没有等待产品列表更新完成
- 链接提取函数bug:
get_links中return these_links写在循环内部,只会返回第一个产品链接,而非全部
修复后的代码
页面操作逻辑修正
import time from playwright.sync_api import sync_playwright from bs4 import BeautifulSoup def playwright_get_soup(url, wait_after_page_load=None): with sync_playwright() as this_playwright: browser = this_playwright.chromium.launch() page = browser.new_page() # 等待网络空闲,确保页面核心资源加载完成 page.goto(url, wait_until="networkidle") # 定位正确的下拉选择器并切换到96条产品 select_selector = "#prodPerPageSelTop" page.wait_for_selector(select_selector) page.select_option(select_selector, value="96") # 等待产品列表更新完成,确保至少加载96个产品元素 page.wait_for_function("document.querySelectorAll('.thumbnail').length >= 96") # 额外短等待确保渲染完成(可选,优先依赖wait_for_function) time.sleep(2) soup = BeautifulSoup(page.content(), "html.parser") browser.close() return soup
链接提取函数修正
def get_links(page_soup): these_links = [] all_product_thumbnails = page_soup.find_all("div", class_="thumbnail") for thumbnail in all_product_thumbnails: a_tag = thumbnail.find("a") if a_tag and "href" in a_tag.attrs: link = a_tag["href"] these_links.append(link) # 将return移至循环外部,确保收集所有链接 return these_links # 执行测试 soup = playwright_get_soup("https://www.alphabroder.com/category/t-shirts") page_links = get_links(soup) print(f"获取到的链接数量:{len(page_links)}") assert(len(page_links) == 96)
关键修复点说明
- 统一使用正确的
#prodPerPageSelTop定位下拉框,避免选择器大小写/拼写错误 - 用
page.wait_for_function等待产品元素数量达标,确保页面完全更新后再获取内容 - 调整链接提取函数的return位置,保证收集全部产品链接
- 优化页面加载策略,使用
networkidle等待网络空闲,避免提前执行操作
内容的提问来源于stack exchange,提问作者Cody Childers
相关产品推荐
相关产品推荐

