selenium又一小坑 无法用XPATH直接获取属性值 需要使用.get_attribute(“href”)

本文介绍了使用Selenium抓取网页URL的方法。针对XPath语法在find_elements_by_xpath中使用不当的问题,提供了一种有效的解决方案:先获取元素节点,再通过get_attribute方法提取所需的属性值。

在使用selenium进行抓取url的时候,试图使用find_elements_by_xpath来获取。
因此想当然的直接使用XPATH的语法进行获取属性
事例缩略后xml结构如下


<div class="qg-limit-list" data-spm="1998564503" data-spm-max-idx>
<a href="//item.taobao.com/item.htm?spm=a21bz.7725273.1998564503.46.1Tdtjr">
    <img src="//img.alicdn.com/tps/TB1lUEgLpXXXXbzXXXXXXXXXXXX-114-114.png" class="qg-img-tag">

按照XPATH正常的语法,想要获取a标签的url也就是href的属性应该写作

//div[@class="qg-limit-list"]/a/@href

然而在使用find_elements_by_xpath一直报错,显示只能存放element而不是object。
最后的解决办法就是,这里只取到标签级,想要获取元素在之后再获取如下

xpath_urls = '//div[@class="qg-limit-list"]/a'
urls_pre = browser.find_elements_by_xpath(xpath_urls)
url = urls_pre[0].get_attribute("href")

对,就是加.get_attribute(“href”),同理想要获得其他属性值,也可以通过他来获取。

使用 Python Selenium 的 `get_attribute("aria-selected")` 方法获取元素属性失败时,可以尝试以下几种解决办法: ### 确保元素已正确定位 元素定位错误会导致无法获取其属性。可以使用浏览器开发者工具(如 Chrome 的开发者工具)来确认元素的定位表达式是否正确。例如,使用 `find_element` 方法时,要确保选择器能够准确找到目标元素。 ```python from selenium import webdriver from selenium.webdriver.common.by import By driver = webdriver.Chrome() driver.get("https://example.com") try: element = driver.find_element(By.CSS_SELECTOR, "your-css-selector") except Exception as e: print(f"元素定位失败: {e}") ``` ### 等待元素加载完成 页面元素可能需要些时间才能完全加载。可以使用显式等待来确保元素在获取属性之前已经加载完成。 ```python from selenium import webdriver from selenium.webdriver.common.by import By from selenium.webdriver.support.ui import WebDriverWait from selenium.webdriver.support import expected_conditions as EC driver = webdriver.Chrome() driver.get("https://example.com") try: element = WebDriverWait(driver, 10).until( EC.presence_of_element_located((By.CSS_SELECTOR, "your-css-selector")) ) aria_selected = element.get_attribute("aria-selected") print(aria_selected) except Exception as e: print(f"获取属性失败: {e}") ``` ### 检查元素是否可见和可用 元素可能存在但不可见或不可用,这也会影响属性的获取。可以使用 `is_displayed()` 和 `is_enabled()` 方法来检查元素的状态。 ```python from selenium import webdriver from selenium.webdriver.common.by import By driver = webdriver.Chrome() driver.get("https://example.com") element = driver.find_element(By.CSS_SELECTOR, "your-css-selector") if element.is_displayed() and element.is_enabled(): aria_selected = element.get_attribute("aria-selected") print(aria_selected) else: print("元素不可见或不可用") ``` ### 检查属性是否存在 有时候元素可能根本没有 `aria-selected` 属性,在获取之前可以先检查属性是否存在。 ```python from selenium import webdriver from selenium.webdriver.common.by import By driver = webdriver.Chrome() driver.get("https://example.com") element = driver.find_element(By.CSS_SELECTOR, "your-css-selector") attributes = element.get_property('attributes') has_aria_selected = any(attr['name'] == 'aria-selected' for attr in attributes) if has_aria_selected: aria_selected = element.get_attribute("aria-selected") print(aria_selected) else: print("元素没有 aria-selected 属性") ``` ### 检查页面是否为动态加载 如果页面是动态加载的,可能需要处理 JavaScript 异步加载的情况。可以使用 `execute_script` 方法来直接执行 JavaScript 代码获取属性。 ```python from selenium import webdriver from selenium.webdriver.common.by import By driver = webdriver.Chrome() driver.get("https://example.com") element = driver.find_element(By.CSS_SELECTOR, "your-css-selector") aria_selected = driver.execute_script('return arguments[0].getAttribute("aria-selected");', element) print(aria_selected) ```
评论 9
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值