Selenium网页爬取:选择下拉菜单后获取当前URL
解决亚马逊爬虫选尺寸后无法获取更新URL的问题
嘿,我懂你碰到的麻烦了——用Selenium选中亚马逊服装的尺寸后,调用driver.current_url居然还是返回原始的URL,完全拿不到切换尺寸后的目标链接对吧?
问题根源
亚马逊的尺寸选择下拉框是通过AJAX异步更新页面内容的,它不会直接刷新整个页面或者修改地址栏的URL,只是动态替换页面里的商品信息(比如对应的ASIN编码)。所以你刚选完尺寸就去拿current_url,得到的肯定还是原来的地址。
解决方案
我们可以通过两种简单的方式获取到更新后的正确URL:
方法1:读取页面的canonical标签
亚马逊页面里的<link rel="canonical">标签会实时更新为当前选中尺寸的商品标准URL,我们只需要等待这个标签更新后,读取它的href属性就行。
修改后的代码示例:
from selenium import webdriver from webdriver_manager.chrome import ChromeDriverManager from selenium.webdriver.support.ui import Select from selenium.webdriver.support.ui import WebDriverWait from selenium.webdriver.support import expected_conditions as EC from selenium.webdriver.common.by import By url='https://www.amazon.ae/Jack-Jones-Glenn-Original-Pants/dp/B07JQB87KL/ref=sr_1_5?crid=M8QQKGLLZ1O9&keywords=jeans&qid=1657289288&sprefix=jeans%2Caps%2C232&sr=8-5&th=1' driver = webdriver.Chrome(ChromeDriverManager().install()) driver.get(url) # 选中目标尺寸 select = Select(driver.find_element(By.ID, "native_dropdown_selected_size_name")) select.select_by_index(2) # 等待页面更新:等原来的canonical标签失效(说明页面已刷新) wait = WebDriverWait(driver, 10) wait.until(EC.staleness_of(driver.find_element(By.CSS_SELECTOR, 'link[rel="canonical"]'))) # 获取更新后的正确URL updated_url = driver.find_element(By.CSS_SELECTOR, 'link[rel="canonical"]').get_attribute('href') print(updated_url)
方法2:直接获取新的ASIN并拼接URL
如果canonical标签不好用,你还可以找到页面中显示当前商品ASIN的元素,拿到新的ASIN后,和亚马逊的商品URL格式拼接:
- 亚马逊商品基础URL格式:
https://www.amazon.ae/dp/[新ASIN] - 再加上原始URL里的查询参数(比如
ref=sr_1_5这类)
举个例子,你可以通过driver.find_element(By.ID, 'ASIN').get_attribute('value')获取新的ASIN,然后拼接成完整URL。
额外提示
选完尺寸后一定要加等待时间,让页面完成异步更新,不然可能拿到的还是旧数据。上面代码里用了WebDriverWait来等待元素失效,比固定time.sleep()更靠谱。
内容的提问来源于stack exchange,提问作者Minda
相关产品推荐
相关产品推荐

