Selenium获取无href属性的<a>标签跳转URL问题
解决无href属性的可点击元素预获取跳转URL问题
下面是几种可行的方案:
检查Angular绑定的点击事件
这类Angular渲染的元素,通常用(click)指令绑定跳转逻辑,试试获取元素的ng-reflect-click属性拿到绑定的方法名:click_handler = driver.find_element(By.TAG_NAME, 'a').get_attribute('ng-reflect-click')拿到方法名后,用
execute_script调用浏览器控制台查看方法实现,从中提取跳转的URL。通过网络监听捕获跳转请求
用Selenium的CDP命令开启网络监听,在点击前捕获即将发起的跳转请求,不用实际完成点击也能拿到URL:# 启用网络监控 driver.execute_cdp_cmd('Network.enable', {}) # 存储捕获到的URL target_urls = [] def catch_request(params): # 只捕获文档类请求(对应页面跳转) if params['request']['resourceType'] == 'Document': target_urls.append(params['request']['url']) # 注册请求监听回调 driver.add_cdp_listener('Network.requestWillBeSent', catch_request) # 触发点击(如果怕跳转影响后续操作,可以用无头浏览器测试) driver.find_element(By.TAG_NAME, 'a').click() # 输出捕获到的URL print(target_urls)如果是单页应用的路由跳转,换成监听
Network.frameNavigated事件更准确。提取Angular路由配置
Angular应用的路由规则一般存在全局配置里,执行JS脚本直接获取路由列表,再结合元素文本(比如这里的"2018")匹配对应的路由地址:# 适用于Angular Router的情况 route_config = driver.execute_script(""" const router = window.ng.getComponent(document.body).router; return router.config.map(item => ({path: item.path, url: router.createUrlTree([item.path]).toString()})); """) print(route_config)检查自定义属性
有些网站会把跳转地址藏在data-url、data-href这类自定义属性里,直接尝试获取这些属性:target_url = driver.find_element(By.TAG_NAME, 'a').get_attribute('data-url')
内容的提问来源于stack exchange,提问作者Mahdi
相关产品推荐
相关产品推荐

