selenium元素定位问题

一、按钮点击

具体网页信息如下:

定位的时候driver.find_element(By.CLASS_NAME, 方法搞不定。

定位方法: 

方法一:通过文本定位

driver.find_element(By.XPATH, "//*[text()='高分一号']").click()
time.sleep(3)

如果是部分文字

#部分文字python:browser.find_element_by_xpath("//*[contains(text(),'一号')]").click()

方法二:使用JS脚步,通过类名来定位

因为一共有7个,写了个循环,

    for i in range(7):name='info-item cursor'js="document.getElementsByClassName('info-item cursor')[{}].click();".format(i)driver.execute_script(js);

注意一些按钮点击后需要回到上一步再次点击。用相同的方法点击上一层按钮即可。

二、图片定位并下载保存

 网页信息如下:

 

 定位方法:

        使用标签tag=img查找到元素,用requests库下载图片

        driver=get_url(url)就是对获取网页这一功能做一个封装,形成一个单独的函数方便使用。

def get_url(url):chrome_options = Options().add_argument("start-maximized")service = Service(executable_path=r"C:\Users\***\PycharmProjects\chromedriver\chromedriver-win64\chromedriver.exe")#chromedriver.exe的位置driver = webdriver.Chrome(service=service, options=chrome_options)driver.get(url)return driver
def img_extr1_ImageGP():#按标签tag来检索图片,并且保存url_str2 = 'https://www.bic.ac.cn/ImageGP/index.php/Home/Index/Lineplot.html'driver = get_url(url_str2)images = driver.find_elements(By.TAG_NAME, "img")#使用标签tag=img进行查找print(images)i=13for image in images:image_url = image.get_attribute("src")print(image_url)# 这里可以使用Python的requests库或其他下载工具来下载图片img_data = requests.get(image_url).contentwith open("./{}.jpg".format(i), 'wb') as fp:fp.write(img_data)i=i+1# 关闭浏览器driver.quit()

 

三、网页截图,分别保存和拼接

代码如下:

        def test_screen_shot1(driver,img_id):#拼接图片

        def test_screen_shot2(driver,image_id):#不拼接

        函数使用的参数分别为:

        driver=get_url(url)上方代码中有该函数。就是对获取网页这一功能做一个封装,形成一个单独的函数方便使用。

        img_id是图片编号的起始序号

def test_screen_shot1(driver,img_id):#拼接图片width = driver.execute_script("return document.documentElement.scrollWidth")page_height = driver.execute_script("return document.documentElement.scrollHeight")window_height = driver.get_window_size()['height']# 获取页面宽度及其宽度print(width, page_height, window_height)i = img_iddriver.save_screenshot('{}.png'.format(i))if page_height > window_height:n = page_height // window_height  # 需要滚动的次数base_mat = np.atleast_2d(Image.open('{}.png'.format(i)))  # 打开截图并转为二维矩阵i=i+1for j in range(n):driver.execute_script(f'document.documentElement.scrollTop={window_height * (j + 1)};')time.sleep(.5)driver.save_screenshot(f'{j+i}.png')  # 保存截图mat = np.atleast_2d(Image.open(f'{j+i}.png'))  # 打开截图并转为二维矩阵base_mat = np.append(base_mat, mat, axis=0)  # 拼接图片的二维矩阵Image.fromarray(base_mat).save('{}.png'.format(n+img_id))# 截图并关掉浏览器# driver.get_screenshot_as_file('{}.png'.format(i))def test_screen_shot2(driver,image_id):#不拼接driver.implicitly_wait(10)driver.set_page_load_timeout(6)# 获取网页高度body_height = driver.execute_script('return document.body.scrollHeight;')window_height = driver.execute_script('return window.innerHeight;')js = "window.scroll(0,arguments[0]*arguments[1])"print(body_height,window_height)i = 0driver.get_screenshot_as_file(f"{i+image_id}.png")while i * window_height < body_height:driver.execute_script(js, window_height, i)time.sleep(5)driver.get_screenshot_as_file(f"{i+image_id}.png")i += 1

附录(本博客使用的头文件):

from selenium.webdriver.common.by import By
from selenium.webdriver.chrome.service import Service
from PIL import Image
import numpy as np
import time
from selenium import webdriver
from selenium.webdriver.chrome.options import Options
import selenium.webdriver.support.ui as uiimport requests

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/741079.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

html5cssjs代码 005 小学数学四则运算练习

html5&css&js代码 005 小学数学四则运算练习 一、代码二、解释 这段代码定义了一个页面&#xff0c;用于小学数学四则运算的练习。这可能有点难&#xff0c;实际如果需要可以通过更改代码来达到要求。 一、代码 <!DOCTYPE html> <html lang"zh">…

抗生素净化提纯大孔吸附树脂

一、介绍 ADS-800级吸附树脂 ADS-800是一款功能强大的&#xff0c;大孔&#xff0c;湿润的球形交联聚合物吸附型树脂。 ADS-800 具有优良的物理特性&#xff0c;化学和热稳定性。它的特定的多孔性和其表面积使的本产品适合于分离技术的应用。 ADS-800 是为了流程工业中的专业…

2024第八届通信与未来互联网国际会议(ICCFI 2024)即将召开!

2024年第8届通信与未来互联网国际会议&#xff08;ICCFI 2024&#xff09; 日本鹿儿岛 | 2024年7月19-21日 ICCFI 2024 | Communications and Future Internet | Kagoshima-shi, Japanhttps://www.iccfi.org/ 主办单位&#xff1a; ◆ 出版 ▪ 会议论文集 投稿论文将经过严…

honle电源维修UV电源控制器维修EVG EPS60

好乐UV电源控制器维修&#xff1b;honle控制器维修&#xff1b;UV电源维修MUC-Steuermodul 2 LΛmpen D-82166 主要维修型号&#xff1a; EVG EPS 60/120、EVG EPS 100、EVG EPS200、EVG EPS 220、EVG EPS 340、EVG EPS40C-HMI、EVG EPS60 HONLE好乐uv电源维修故障包括&#…

DARTS: DIFFERENTIABLE ARCHITECTURE SEARCH

DARTS&#xff1a;可微架构搜索 论文链接&#xff1a;https://arxiv.org/abs/1806.09055 项目链接&#xff1a;https://github.com/quark0/darts ABSTRACT 本文通过以可微分的方式表述任务&#xff0c;解决了架构搜索的可扩展性挑战。与在离散和不可微搜索空间上应用进化或强…

Linux fork函数详解

文章目录 1 基本介绍2 fork实例2.1 多个fork返回值2.2 C语言 fork与输出2.3 fork &#x1f4a3; 1 基本介绍 #include <sys/types.h> #include <unistd.h>pid_t fork(void)描述 fork用于创建一个子进程&#xff0c;它与父进程的唯一区别在于其PID和PPID&#xff0…

频繁Full GC如何排查

频繁的Full GC可能会影响应用程序的性能和稳定性&#xff0c;因此需要进行排查和解决。下面是一些可能的排查方法&#xff1a; GC日志分析&#xff1a; 启用GC日志&#xff0c;并分析GC日志以了解Full GC的触发情况和频率。GC日志会提供有关GC事件的详细信息&#xff0c;包括GC…

2024年PHP伪协议详解

【2024年PHP伪协议详解】 嘿&#xff0c;亲爱的编程新手们&#xff01;今天我们要一起探索PHP伪协议的奇妙世界。想象一下&#xff0c;PHP伪协议就像是一个神秘的传送门&#xff0c;能让我们在PHP的海洋中畅游无阻。准备好了吗&#xff1f;让我们开始这段冒险之旅吧&#xff01…

C语言--sprintf()函数的用法

一.sprintf()语法 sprintf&#xff08;&#xff09; 是一个 C 语言中的函数&#xff0c;用于将格式化的数据写入一个字符串中。它的用法与 printf() 函数相似&#xff0c;printf&#xff08;&#xff09;函数是将内容输出到屏幕上&#xff0c;而sprintf()函数是将格式化的内容输…

蓝桥杯java组 测试次数

题目描述 x星球的居民脾气不太好&#xff0c;但好在他们生气的时候唯一的异常举动是&#xff1a;摔手机。 各大厂商也就纷纷推出各种耐摔型手机。x星球的质监局规定了手机必须经过耐摔测试&#xff0c;并且评定出一个耐摔指数来&#xff0c;之后才允许上市流通。 x星球有很多…

设计模式一 ---单例设计模式(动力节点,JavaSE基础)

设计模式 1.什么是设计模式&#xff1f; 2.设计模式的分类 单例设计模式就是GoF模式中的一种。 3.GoF设计模式的分类&#xff1a; 单例设计模式&#xff1a; 顾名思义&#xff1a;单个实例的设计模式&#xff01;

Arco 部署项目后部分样式未生效

文章目录 问题分析 问题 在更改 arco 的原始样式后&#xff0c;发现部分样式并未被更改 分析 如下所示&#xff0c;通过元素查看器可以看到原生的绑定的 class 类名和样式 而我将整个的设置了的样式做了替换 :deep(.arco-menu-light.arco-menu-horizontal .arco-menu-ite…

【力扣精选算法100道】——二进制求和

LCR 002. 二进制求和 - 力扣&#xff08;LeetCode&#xff09; 目录 &#x1f388;了解题意 &#x1f388;算法分析 &#x1f6a9;cur1>0 &#x1f6a9;cur2>0 &#x1f6a9;t &#x1f388;实现代码 &#x1f388;了解题意 遵循二进制加法法则&#xff0c;如果俩…

跨阻放大器(TIA)的输入输出阻抗的定义、分析和影响因素

跨阻放大器&#xff08;TIA&#xff09;的输入输出阻抗的定义、分析和影响因素 跨阻放大器&#xff08;Transimpedance Amplifier&#xff0c;简称TIA&#xff09;是一种常用于将电流信号转换为电压信号的放大器。在TIA电路中&#xff0c;输入阻抗是指输入端对电流信号的响应能…

接入DDoS高防后如何设置源站保护

业务接入DDoS高防后&#xff0c;您应当尽量避免源站IP暴露&#xff0c;以防止攻击者绕过DDoS高防直接攻击源站。如果源站IP有暴露风险&#xff0c;建议您设置源站保护&#xff0c;例如只允许DDoS高防回源IP的入方向流量&#xff0c;提升业务可用性。本文九河云介绍不同网络架构…

48. 【Linux教程】yum 软件包管理

本小节介绍如何在 Linux 系统中使用 yum 命令软件管理。 1.yum 简介 yum 是 Red Hat 软件包管理器&#xff0c;它能够查询有关可用软件包的信息&#xff0c;从存储库获取软件包&#xff0c;安装和卸载软件包&#xff0c;以及将整个系统更新到最新的可用版本。yum 在更新&#…

酷开会员 | 和好朋友一起玩酷开系统体感游戏

春天已经到来&#xff0c;闲暇时间做些什么好呢&#xff1f;那就玩会游戏吧&#xff01;打开酷开系统&#xff0c;在体感游戏中&#xff0c;寻找一款自己喜欢的运动&#xff0c;和家人一起运动起来吧&#xff01; 酷开系统是一款非常贴心、全面的智能电视操作系统。它拥有丰富…

介绍一下c++中的多态

c中实现多态分为两种方式&#xff0c;分别是静态多态&#xff08;也叫编译时多态&#xff09;&#xff0c;和动态多态(也叫运行时多态) 静态多态: 是在编译时就确定了函数的类型和会调用哪个函数&#xff0c;这种方式叫做静态连接或者早绑定&#xff0c;静态多态主要实现手段…

springboot/ssm航班进出港管理系统Java航班信息记录管理系统web

springboot/ssm航班进出港管理系统Java航班信息记录管理系统web 基于springboot(可改ssm)vue项目 开发语言&#xff1a;Java 框架&#xff1a;springboot/可改ssm vue JDK版本&#xff1a;JDK1.8&#xff08;或11&#xff09; 服务器&#xff1a;tomcat 数据库&#xff1…

Math类中的方法总结

Math.min(int a, int b) 或 Math.min(double a, double b)&#xff1a;返回两个值中的最小值。 Math.abs(int a) 或 Math.abs(double a)&#xff1a;返回值的绝对值。 Math.pow(double a, double b)&#xff1a;返回a的b次幂的结果。 Math.sqrt(double a)&#xff1a;返回a的平…