Python如何点击网页元素并解析关联XML文件文本抓取站点地址
解决方案
相似问题参考(已翻译)
- 如何用Python解析网站中多个相同class名的属性
- Selenium调试报错:元素在(x,y)坐标点不可点击
问题1:Selenium启动Chrome仅显示少量站点的修复
- 启动Chrome时新增视口和缩放配置,确保和手动访问的环境一致:
options = webdriver.ChromeOptions() options.add_argument("--incognito") # 新增以下两行配置 options.add_argument("--window-size=1920,1080") options.add_argument("--force-device-scale-factor=1") driver = webdriver.Chrome('Directory/chromedriver.exe', options=options)
- 若仍加载不全,可直接通过JS修改地图缩放等级,触发全量点位加载:
driver.execute_script("document.querySelector('migros-maps').setAttribute('zoom', '8')") time.sleep(2)
问题2:「1163 STANDORTE」按钮定位失败的修复
你之前用的动态class、绝对路径XPATH稳定性极低,站点前端框架会动态生成class名,换个访问环境就会失效,改用模糊文本匹配+JS点击的方案,兼容所有场景:
# 匹配包含STANDORTE文本的按钮元素,不用绑定固定class target_btn = WebDriverWait(driver, 20).until( EC.presence_of_element_located((By.XPATH, "//button[contains(normalize-space(), 'STANDORTE')]")) ) # 用JS触发点击,跳过元素遮挡、不在视口内等不可点击限制 driver.execute_script("arguments[0].click();", target_btn) time.sleep(3)
问题3:地址数据抓取的最优方案
不需要依赖点击按钮后加载的XML文件,该站点全量门店数据可通过公开接口直接获取,请求效率和数据完整度远高于Selenium页面抓取:
import requests import pandas as pd headers = { "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/120.0.0.0 Safari/537.36", "x-migros-api-version": "7" } # limit设置为2000大于站点总门店数1163,可一次拉取全量数据 req_url = "https://web-api.migros.ch/locations?types=supermarket,convenience_store,migros_bank,restaurant,hotel,gas_station,culture_school,fitness_center,apotek,click_collect,course,other&offset=0&limit=2000&longitude=6.9575&latitude=46.8202&radius=1000000" response = requests.get(req_url, headers=headers) all_store_data = response.json()["locations"] # 可直接转为DataFrame导出为CSV df = pd.DataFrame(all_store_data) df.to_csv("migros_full_stores.csv", index=False, encoding="utf-8-sig")
如果必须抓取点击后的XML内容,在按钮点击完成后,调用driver.page_source获取全量页面源码,再用BeautifulSoup定位对应XML节点提取内容即可。
内容的提问来源于stack exchange,提问作者tiny
相关产品推荐
相关产品推荐

