xpath补充:lxml.etree常用方法,使用selenium、xpath定位不到标签时处理办法

这些东西几年前学selenium和appium的时候就经常遇到,而且还不止这些,当时各种坑都踩过,为此还去学了一段时间自动化测试,刚好正准备整理selenium笔记的时候 有个网友用selenium-xpath时遇到了这些问题来找我,稍微去百度了一下,然后又看了以前写过的代码,发现自己真的又又失忆了,都是以前玩过的 o(╥﹏╥)o
随便整理了几个方法,其实还有很多(o(╥﹏╥)o)

在这篇文章之后,又将selenium的基本使用已经整理了,但是还有很多细节(坑),得慢慢想起来了再补充

.get_attribute()

.get_attribute是selenium中的方法

获取HTML文档(源码)、文本内容

在使用selenium定位元素时,虽然同样可以通过xpath定位,但是提取文档时,却并不能直接使用xpath中的text()或者string()方法来获取文档,所以需要先通过xpath定位到标签,然后再通过etree来提取

# 1、获取标签内的源码,包含所获标签  innerHTML
temp = driver.find_element_by_xpath("//div/h1")
html= temp.get_attribute('innerHTML')

driver.find_element_by_class_name('column').get_attribute('innerHTML')
# 获取到的是整个column标签下面所有的html,是字符串格式,不对etree对象有用


# 2、获取标签内的源码,不包含所获标签  outerHTML
temp = driver.find_element_by_xpath("//div/h1")
html= temp.get_attribute('outerHTML')


# 3、获取标签中的文本内容  textContent
texts = driver.find_elements_by_xpath('//div/a')  # 文本所在的标签

for i in texts:
  name = i.get_attribute('textContent')
  print(name)

示例1

startTime = browser.find_element_by_xpath
  • 2
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
这段代码的作用是爬取 https://www.ivsky.com/ 网站上的图片,并将其保存在本地文件夹中。 具体分析如下: 1. 导入必要的模块 ``` import requests from lxml import etree from selenium import webdriver from selenium.webdriver.common.by import By import os import time import threading ``` - requests:用于发送 HTTP 请求并获取响应内容。 - lxml:用于对 HTML/XML 文档进行解析和处理。 - selenium:用于自动化测试,可以模拟用户在浏览器中的操作。 - os:用于操作文件和目录。 - time:用于添加延迟,防止频繁访问网站被封 IP。 - threading:用于实现多线程操作。 2. 设置目标网址和请求头 ``` url = 'https://www.ivsky.com/' #目标网址 headers = { 'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/86.0.4240.198 Safari/537.36' } ``` - 目标网址:需要爬取的网站链接。 - 请求头:模拟浏览器发送请求的头部信息,防止被网站识别为爬虫并拒绝访问。 3. 设置本地文件夹路径和 Chrome 驱动器路径 ``` path = r'C:\Users\yangyuhuan\AppData\Local\Google\Chrome\Application\chromedriver' # Chrome 驱动器路径 driver = webdriver.Chrome(executable_path=path) #申请驱动器 if not os.path.exists("./images"): os.mkdir("./images") #创建结果文件夹 ``` - path:Chrome 驱动器的路径。 - driver:使用 Chrome 驱动器打开网页。 - os.mkdir():创建存储图片的文件夹。 4. 定义下载图片函数 ``` def download_image(src, name): img_url = "https:" + src res3 = requests.get(img_url, headers=headers).content #获取图片的二进制文件 time.sleep(3) print(f'正在下载:{name}') with open('./images/' + name + '.jpg', 'wb') as f: f.write(res3) ``` - src:图片的链接地址。 - name:图片的名称。 - img_url:拼接完整的图片链接地址。 - requests.get():发送 GET 请求获取图片的二进制文件。 - time.sleep():添加延迟,防止频繁访问网站被封 IP。 - with open():将获取的图片二进制文件写入本地文件中。 5. 定义下载每一页的函数 ``` def download_page(page): url = f"https://www.ivsky.com/bizhi/index_{page}.html" driver.get(url) response = driver.page_source # 获取网页源码 html = etree.HTML(response)# 对网页结构进行解析 time.sleep(3) src_image_result=html.xpath('//div[@class="il_img"]/a/img/@src') name_image_result=html.xpath('//div[@class="il_img"]/a/img/@alt') threads = [] for src,name in zip(src_image_result,name_image_result): t = threading.Thread(target=download_image, args=(src, name)) threads.append(t) t.start() for thread in threads: thread.join() ``` - page:需要下载的网页页码。 - url:拼接目标网站的每一页链接地址。 - driver.get():使用 Chrome 驱动器打开每一页。 - driver.page_source:获取每一页的 HTML 源码。 - etree.HTML():对每一页的 HTML 源码进行解析。 - src_image_result 和 name_image_result:通过 xpath 解析出每一页的图片链接地址和名称。 - threading.Thread():创建一个线程,使用 download_image() 函数下载图片。 - threads.append():将线程加入线程池。 - t.start():启动线程。 - thread.join():等待线程执行完毕。 6. 循环遍历每一页并下载图片 ``` for page in range(10): # 页码 download_page(page) driver.quit() ``` - range(10):循环遍历前 10 页。 - download_page():下载每一页的图片。 - driver.quit():关闭 Chrome 驱动器。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值