【网络爬虫】selenium拼接xpath点击伪元素思路
在使用selenium的过程中经常遇到含有伪元素的页面,分享下我拼接xpath的思路。
实例网站 拉钩
目标数据位置如下

右键复制的xpath是这样的
//*[@id="jobList"]/div[1]/ul/li[1]/div[1]/div[1]/span/div/div/h2/a
放到代码中执行

没找到,尝试找他整体数据的位置

下边是目标数据的位置 上面是整体数据的位置
尝试拿整体数据的位置 看看能不能找到数据
//*[@id="jobList"]/div[1]/ul/li[1]
代入代码执行

xpath有效 数据也有 继续往下看 下面那个div没有before就先跳过看再下面一个div

就是这个div 看看有没有数据 xpath是
//*[@id="jobList"]/div[1]/ul/li[1]/div[1]/div[1]
代入代码执行

数据也是有的 继续往下 看看这个span

xpath是这个
//*[@id="jobList"]/div[1]/ul/li[1]/div[1]/div[1]/span

执行发现 想要的数据没了 但是相关的数据在 那我看一下这个数据在element的位置在哪
定位的是上面的span 结果到了下面的span 然后发现想要的数据在和span同级的div里 所以修改一下 xpath 看看能不能取到数据
//*[@id="jobList"]/div[1]/ul/li[1]/div[1]/div[1]/div

这次是我们想要的了 再往下继续找

xpath 添加h2
//*[@id="jobList"]/div[1]/ul/li[1]/div[1]/div[1]/div/h2

结果没问题 因为我想要的是a里的data-obj的值 所以需要继续找a
最终xpath为
//*[@id="jobList"]/div[1]/ul/li[1]/div[1]/div[1]/div/h2/a
这就是最终的结果了

这是我的一个思路 相对来说比较麻烦 css和js比较好的可以用css和js找
这个是css和js的方法
这是完整的代码
import time
from selenium.webdriver import Chrome
from selenium.webdriver.common.by import By
# 1.创建浏览器
web = Chrome()
# 2.输入网址
web.get("http://lagou.com")
time.sleep(3)
# 3.获取需要的内容
# 由于页面有个广告,需要先处理
btn_element = web.find_element(By.XPATH, '//*[@id="cboxClose"]') # 在页面中找到x,去点击它
btn_element.click() # 点击
time.sleep(2)
x = '//*[@id="jobList"]/div[1]/ul/li[1]'
d = web.find_element(By.XPATH, x)
print(x,d.text)
x = '//*[@id="jobList"]/div[1]/ul/li[1]/div[1]/div[1]'
d = web.find_element(By.XPATH, x)
print(x,d.text)
x = '//*[@id="jobList"]/div[1]/ul/li[1]/div[1]/div[1]/span'
d = web.find_element(By.XPATH, x)
print(x,d.text)
x = '//*[@id="jobList"]/div[1]/ul/li[1]/div[1]/div[1]/div'
d = web.find_element(By.XPATH, x)
print(x,d.text)
x = '//*[@id="jobList"]/div[1]/ul/li[1]/div[1]/div[1]/div/h2'
d = web.find_element(By.XPATH, x)
print(x,d.text)
x = '//*[@id="jobList"]/div[1]/ul/li[1]/div[1]/div[1]/div/h2/a'
d = web.find_element(By.XPATH, x)
data = d.get_attribute('data-obj')
print(x,d.text, data )
本文介绍了如何使用Selenium结合XPath来定位和提取含有伪元素的网页数据。作者通过示例详细阐述了从页面元素的层级结构中逐步定位目标数据的过程,最终成功获取到a标签中的data-obj值。此外,文章还提及了CSS和JS作为替代方法的可能性。
1394

被折叠的 条评论
为什么被折叠?



