Selenium driver无法获取a标签href属性问题求助
原因分析
谷歌图片搜索结果区块下的第一个<a>标签是缩略图交互触发节点,默认未赋值href属性,该属性仅在用户hover/点击节点后由前端JS动态生成,因此直接调用get_attribute('href')会返回None。
解决方案
方案1:模拟触发交互后读取属性
通过模拟hover动作触发JS注入href属性,等待短延迟后再读取即可,代码示例:
from selenium.webdriver.common.action_chains import ActionChains import time for i in range(1,200): xPathOfAllA = '//*[@id="islrg"]/div[1]/div['+str(i)+']/a' el = driver.find_elements_by_xpath(xPathOfAllA) # 触发hover动作 ActionChains(driver).move_to_element(el[0]).perform() # 等待JS执行完成 time.sleep(0.1) href = el[0].get_attribute('href') # 兜底用JS直接读取节点属性 if not href: href = driver.execute_script("return arguments[0].href", el[0])
方案2:直接拼接目标链接
你需要的/imgres?imgurl[...]格式链接可通过节点自带的静态属性直接拼接,无需等待动态加载:
- 从第一个
<a>标签读取data-imgid、data-ved等参数,按照谷歌图片路径规则直接拼接即可 - 也可从第二个
<a>的正常返回链接中提取图片地址、来源地址等参数,手动构造/imgres格式的路径
方案3:优化定位逻辑
避免使用下标类的绝对XPath定位,改用更稳定的CSS选择器匹配目标节点,降低页面结构变动带来的定位失效风险:
# 直接匹配所有结果块下的第一个a标签 first_a_list = driver.find_elements_by_css_selector('#islrg div.isv-r > a:first-child') for a in first_a_list: ActionChains(driver).move_to_element(a).perform() time.sleep(0.1) href = a.get_attribute('href')
内容的提问来源于stack exchange,提问作者WannaBe
相关产品推荐
相关产品推荐

