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