Python Selenium定位点击元素失败:原可用代码突发失效求助
Shopify网站Selenium抓取商品总价时无法定位结账按钮问题
我正在使用Selenium从Shopify搭建的网站抓取多款商品的总价差额(包含税费和运费),目前已成功实现将商品加入购物车的功能,流程为:将选中商品加入购物车,进入结账页面,更新城市、邮编和州信息,最后在确认页面获取总价。
最初代码能成功进入结账页面,但无法定位需要输入内容的元素;在解决该问题的过程中,代码突然完全无法定位结账按钮。
经排查,我怀疑问题可能出在需要切换frame——点击购物车按钮后会弹出侧边栏,结账按钮就在该侧边栏中,但查看HTML并未找到frame标签。我已尝试使用time.sleep()等待加载、滚动到元素可见区域,均无效。点击购物车后会有弹窗遮挡界面。
我的代码
url = 'https://americanbarbell.com/products/american-barbell-cast-kettlebell' index_list = [('4KG',1),('12KG',4)] smallerlist = ['4KG', '12KG'] path = "C:\Program Files (x86)\msedgedriver.exe" driver = webdriver.Edge(path) driver.get(url) time.sleep(1) driver.refresh() # 页面加载会弹出弹窗,用刷新作为关闭弹窗的临时方案 time.sleep(1) driver.execute_script("window.scrollTo(0, 550)") for item in smallerlist: for tup in index_list: if item == tup[0]: n = tup[-1] time.sleep(2) driver.find_element(By.XPATH, '//*[@id="product_form_377205240"]/div[2]/div/div/div').click() time.sleep(2) driver.find_element(By.XPATH, f'//*[@id="377205240-weight"]/li[{n}]/div').click() time.sleep(1) add_cart = driver.find_element(By.XPATH, '//*[@id="product_form_377205240"]/div[3]/button') driver.execute_script("arguments[0].click();", add_cart) time.sleep(3) driver.refresh() checkout = driver.find_element(By.XPATH,'/html/body/div[2]/div[5]/div[3]/div/form/div[2]/div[2]/div[3]/div[2]').click()
报错信息
Message: no such element: Unable to locate element: {"method":"xpath","selector":"/html/body/div[2]/div[5]/div[3]/div/form/div[2]/div[2]/div[3]/div[2]"}
尝试过的其他XPATH
/html/body/div[3]/div[5]/div[3]/div/form/div[2]/div[2]/div[3]/div[2]/button
我也曾尝试用XPATH定位弹窗并关闭,但也无法找到元素。代码原本运行正常,毫无预兆地突然失效,猜测初始代码稳定性不足只是侥幸运行。想请教几个问题:
- 是否需要切换frame?
- 是否需要更长等待时间?
- 元素是否被弹窗遮挡?
内容的提问来源于stack exchange,提问作者PeterFonteneau
相关产品推荐
相关产品推荐

