初始爬虫9

news2024/11/17 3:38:37

1.元素定位后的操作

“find_element“仅仅能够获取元素,不能够直接获取其中的数据,如果需要获取数据需要使用以下方法”。下面列出了两个方法:

  1. 获取文本 element.text 通过定位获取的标签对象的 text 属性,获取文本内容

  2. 获取属性值 element.get_attribute("属性名") 通过定位获取的标签对象的 get_attribute 函数,传入属性名,来获取属性的值

# -*- coding: utf-8 -*-
from selenium import webdriver
from selenium.webdriver.common.by import By

# 打开目标URL
url = 'https://cq.58.com/hezu/?PGTID=0d100000-0002-59f0-74d2-1a2d488460c0&ClickID=5'

# 初始化Edge浏览器
driver = webdriver.Edge()

# 打开页面
driver.get(url)

# 使用 find_elements 获取所有匹配的元素
el_list = driver.find_elements(By.XPATH, '/html/body/div[6]/div[2]/ul/li/div[2]/h2/a')

# 遍历并打印每个元素
for el in el_list:
    print(el.text, el.get_attribute('href'))  # 打印元素的文本内容

# 关闭浏览器
driver.quit()

# el.click() 点击操作
# el.send_keys(data) el:text inpput
# el.clear() 对输入框做清空操作

2.selenium控制标签页切换

# -*- coding: utf-8 -*-
from selenium import webdriver
from selenium.webdriver.common.by import By
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC

# 设置 URL 和驱动
url = 'https://cq.58.com/'
driver = webdriver.Edge()
driver.get(url)

print(driver.current_url)
print(driver.window_handles)

# 定位并点击合租链接
el = driver.find_elements(By.XPATH, '/html/body/div[3]/div[1]/div[1]/div/div[1]/div[1]/span[3]/a')
if el:
    el[0].click()
else:
    print("元素未找到!")

# 切换到新窗口/标签页
driver.switch_to.window(driver.window_handles[-1])

# 处理动态加载,使用显示等待,等待所需元素加载
try:
    # 等待直到指定的元素在 DOM 中存在
    el_list = WebDriverWait(driver, 10).until(
        EC.presence_of_all_elements_located((By.XPATH, '/html/body/div[6]/div[2]/ul/li/div[2]/h2/a'))
    )
    print(len(el_list))  # 现在应该能正确打印元素的数量
except Exception as e:
    print(f"发生错误:{e}")

# 使用完毕后,记得关闭驱动
driver.quit()

3.窗口切换(存在内部框架)

 

QQ空间登录窗口切换

# -*- coding: utf-8 -*-
from selenium import webdriver
from selenium.webdriver.common.by import By
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC

url = 'https://qzone.qq.com/'
driver = webdriver.Edge()
driver.get(url)
driver.implicitly_wait(10)

# 等待 iframe 可用并切换到 iframe
try:
    # 使用 ID 查找 iframe,确保使用正确的选择器
    WebDriverWait(driver, 10).until(
        EC.frame_to_be_available_and_switch_to_it((By.ID, "login_frame"))
    )

    # 需要点击操作
    driver.find_element(By.ID, 'switcher_plogin').click()
    driver.find_element(By.ID, 'u').send_keys('账号')  # 请替换成您的账号
    driver.find_element(By.ID, 'p').send_keys('密码')  # 请替换成您的密码
    driver.find_element(By.ID, 'login_button').click()

except Exception as e:
    print(f"An error occurred: {e}")

finally:
    # 关闭浏览器
    driver.quit()

163邮箱登录窗口切换

from selenium import webdriver
from selenium.webdriver.common.by import By
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
import time

# 创建浏览器驱动driver
driver = webdriver.Edge()
mail_url = "http://www.mail.163.com"

# 访问指定网页
driver.get(mail_url)
driver.implicitly_wait(10)

# 有内嵌网页,需要先切换到内嵌frame网页再进行定位
# 等待 iframe 加载并切换到 iframe
WebDriverWait(driver, 10).until(
    EC.frame_to_be_available_and_switch_to_it((By.TAG_NAME, "iframe"))
)

# 定位账号输入框
email_input = driver.find_element(By.XPATH, '//input[@name="email"]')
email_input.clear()  # 删除提示信息
email_input.send_keys("账号")  # 测试过程中替换成自己的账号名

# 定位密码输入框
password_input = driver.find_element(By.NAME, "password")
password_input.clear()  # 删除提示信息
password_input.send_keys("密码")  # 测试过程中替换成自己的密码

# 定位登录按钮并点击
driver.find_element(By.ID, "dologin").click()

# 等待登录过程完成
time.sleep(2)  # 可根据需要调整等待时间

# 关闭浏览器
driver.quit()

4.selenium的cookies操作

# -*- coding: utf-8 -*-
from selenium import webdriver

url = 'http://www.baidu.com'
driver = webdriver.Edge()
driver.get(url)
print(driver.get_cookies())

# cookies = {}
# for data in driver.get_cookies():
#     cookies[data['name']] = data['value']

cookies = {data['name']: data['value'] for data in driver.get_cookies()}

print(cookies)

# # 删除cookie
# driver.delete_cookie('CookieName')
# # 删除所有cookie
# driver.delete_all_cookies()

 

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

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

相关文章

opencv实战项目二十九:GrabCut分割人像

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 文章目录 前言一、GrabCut介绍:二、opencv实现:三、效果: 前言 在数字图像处理领域,人像分割是一项极具挑战性的任务&#xf…

二维数组的使用

本章我将用自己的语言给大家翻译二维数组的使用,要是因为我阐述的不清晰,大家不懂的的可以直接在评论里问。 1.下标 二维数组的下标和一维数组没有多大的区别,唯一的区别就是,一维数组只有列,而二维数组还有行 一维数…

C高级(Day22)

一、学习内容 shell指令 文件相关的指令 重定向 > >> echo :打印字符串 cat: 在终端打印文件的内容 链接文件 硬链接文件:文件的inode号是一样的。 查看文件inode号: ls -i 格式:ln 被链接的文件 创建硬链接文件 1 硬链接的文件…

maven-web项目配置打包插件

maven-web项目配置打包 配置maven 打包插件 <!-- 打包 --><plugin><groupId>org.apache.maven.plugins</groupId><artifactId>maven-war-plugin</artifactId><version>2.4</version><!-- <configuration><webRes…

c#使用winscp库实现FTP/SFTP/SCP的获取列表、上传和下载功能

网上写c#调用winscp实现的资料很少,且写的不够详细。本人查了下winscp的libraries说明,写了个小工具,供大家参考。 winscp的接口说明地址如下: WinSCP .NET Assembly and COM Library :: WinSCP 一、先展示一下小工具的界面 1、支持SFTP/FTP/SCP 2、支持文件夹、文件的…

UE4_Niagara基础实例—4、静态网格体表面生成粒子

效果图&#xff1a; 分析&#xff1a;在物体面上生成粒子&#xff0c;改变粒子的不透明度&#xff0c;让粒子收到力&#xff0c;并添加紊乱&#xff0c;类似于水蒸气。 操作步骤&#xff1a; 1、创建个niagara 系统&#xff0c;使用模版 simple sprite burst。简单调节参数。…

2024年【金属非金属矿山(地下矿山)安全管理人员】考试总结及金属非金属矿山(地下矿山)安全管理人员考试技巧

题库来源&#xff1a;安全生产模拟考试一点通公众号小程序 金属非金属矿山&#xff08;地下矿山&#xff09;安全管理人员考试总结根据新金属非金属矿山&#xff08;地下矿山&#xff09;安全管理人员考试大纲要求&#xff0c;安全生产模拟考试一点通将金属非金属矿山&#xf…

第五届计算机科学与管理科技国际学术会议(ICCSMT 2024)

梁哲&#xff0c;同济大学长聘特聘教授&#xff0c;国家杰青、首届国家杰青延续项目获得者、上海市曙光学者、上海市优秀学术带头人。本科毕业于新加坡国立大计算机工程系、硕士毕业于新加坡国立大学工业与系统工程系、博士毕业于美国新泽西州立大学工业工程系。理论研究主要集…

农牧场可视化管理:精准监测与优化运营

利用图扑可视化技术实现农牧场的实时数据监测和分析&#xff0c;优化资源配置&#xff0c;提高生产效率和可持续发展能力。

文件flac怎么转成mp3?这几种方法每个人都能学会!

文件flac怎么转成mp3&#xff1f;FLAC以其无损音频的卓越音质和精湛的压缩技术&#xff0c;在音乐发烧友与音频专业人士中赢得了无可撼动的地位&#xff0c;然而&#xff0c;任何技术的辉煌背后都伴随着其特有的挑战与考量&#xff0c;FLAC的显著特点就是无损压缩&#xff0c;虽…

360周鸿祎为什么说大模型已成茶叶蛋?

大模型炒了一年&#xff0c;为什么没有特别火的应用&#xff1f; 最近几天360创始人周鸿祎称&#xff0c;去年感觉大模型是原子弹&#xff0c;今年感觉是茶叶蛋。 什么意思&#xff1f;我想大概就是说大模型谁都能玩了&#xff0c;现在国内的大模型没有一千&#xff0c;也有几…

JAVA的版本

Java的版本开始还正常&#xff1a;1.0 ->1.1 顺序增加&#xff0c;到了2004年&#xff0c;不知什么原因1.5又有了新的平行名字5&#xff0c;这样Java 1.6对应Java6&#xff0c;一直到Java1.8 对应 Java8&#xff0c;然后到在2017年彻底没了Java1.9,只有Java9了。好吧这可以忍…

椭圆距离计算的简单方法

分析发现找到点到椭圆的最近距离等价于求解一元四次方程。想象一下一个圆和一个椭圆最多相交四次。从这个观点出发,问题转化为找到与椭圆仅相交一次的圆。如果用四次方程表示,其中两个根将在交点处共享,而另外两个根将会是复数。 尽管四次方程的封闭解确实存在,但迭代方法更…

言语理解(2)

B B出现在文章中的第一句话&#xff0c;属于转折前的内容非重点 在这一过程中&#xff0c;属于对前面的指代&#xff0c;后面可以引出文章中的中心内容 A D没有提及到农村&#xff0c;C选项和文段中的最后一句话是相契合的 B 色彩是文章中的主题词&#xff0c;不过属于转折&…

代码随想录算法训练营第59天|卡码网 47. 参加科学大会、94. 城市间货物运输 I

1. 卡码网 47. 参加科学大会 题目链接&#xff1a;https://kamacoder.com/problempage.php?pid1047 文章链接&#xff1a;https://www.programmercarl.com/kamacoder/0047.参会dijkstra堆.html#总结 思路依然是 dijkstra 三部曲&#xff1a; 1.第一步&#xff0c;选源点到哪个…

Hadoop HDFS命令操作实例

一.创建与查看HDFS目录 每次重启后&#xff0c;Jps和java -version执行出来的结果不符合就使用 source ~/.bash_profile 是在 Unix/Linux 系统上用来重新加载用户的 Bash 配置文件 ~/.bash_profile 的命令。这条命令的作用是使得当前的 Bash 环境重新读取并应用 ~/.bash_pro…

Android studio安装问题及解决方案

Android studio安装问题及解决方案 gradle已经安装好了&#xff0c;但是每次就是找不到gradle的位置&#xff0c;每次要重新下载&#xff0c;很慢&#xff0c;每次都不成功 我尝试用安装android studio时自带的卸载程序&#xff0c;卸载android studio&#xff0c;然后重新下…

Centos8.5.2111(2)之基于docker容器的SELinux及防火墙配置与管理

对于Linux服务器而言&#xff0c;常用netfilter/iptables数据包过滤系统。Centos 8采用了firewalld取代了iptables。firewalld和iptables其实都不是真正的防火墙&#xff0c;只是定义策略的防火墙工具而已。 SELinux全称为“Security-Enhanced Linux”&#xff0c;是安全增强型…

移情别恋c++ ദ്ദി˶ー̀֊ー́ ) ——15.红黑树

1.红黑树的概念 红黑树&#xff0c;是一种二叉搜索树&#xff0c;但在每个结点上增加一个存储位表示结点的颜色&#xff0c;可以是Red或 Black。 通过对任何一条从根到叶子的路径上各个结点着色方式的限制&#xff0c;红黑树确保没有一条路 径会比其他路径长出俩倍&#xff0c;…

产品包装检测系统源码分享

货架产品包装检测检测系统源码分享 [一条龙教学YOLOV8标注好的数据集一键训练_70全套改进创新点发刊_Web前端展示] 1.研究背景与意义 项目参考AAAI Association for the Advancement of Artificial Intelligence 项目来源AACV Association for the Advancement of Computer…