【selenium】拼接xpath点击伪元素思路

【网络爬虫】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 )

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

星火飞花

感谢打赏

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值