一、获取标签页的三种方法

# 导入DrissionPage库中的Chromium模块
from DrissionPage import Chromium

# 创建一个Chromium浏览器实例,用于自动化控制Chrome浏览器
page = Chromium()

# 获取标签页的3种方法

# 获取当前页面的标签页对象
tab1 = page.get_tab()

# 这个获取方法不用加括号,其他的两个标签页的获取方法要加括号

# 获取页面最新的标签页
tab2 = page.latest_tab

# 创建一个新的标签页
tab3 = page.new_tab()

1. tab1 = page.get_tab() - 获取当前活跃标签页

返回的是你“正在操作”的标签页,返回当前处于激活状态的标签页对象,就好比你在浏览器中打开了多个标签页,page.get_tab()就像是你当前正在查看的那个标签页。当你需要操作当前可见的页面内容时适用这种获取标签页的方法。

2. tab2 = page.latest_tab - 获取最新创建的标签页

返回最近创建的那个标签页对象,不一定是当前激活的标签页,但一定是最新创建的,就像你刚打开了一个新标签页,page.latest_tab 就是你最新打开的那个标签页。当你点击链接打开新标签页后,需要操作那个新页面时需要用到这个方法。

3. tab3 = page.new_tab() - 创建并获取新标签页

主动创建一个新的空白标签页并返回它的对象,这个方法是"主动创建"而不是"获取已存在的"网页页面,就像你手动点击浏览器上的"新建标签页"按钮,page.new_tab()会主动创建一个全新的空白标签页。这个方法适用于需要从头开始在新标签页工作时使用。

三种方法的对比表:

方法 作用 是否创建新页面 适用场景
page.get_tab() 获取当前活跃页 不创建 操作当前正在看的页面
page.latest_tab 获取最新创建的页 不创建 操作刚自动打开的新页面
page.new_tab() 创建新标签页 创建 需要主动开新页面工作

二、创建文件来保存抓取的内容

# 导入DrissionPage库中的Chromium模块
from DrissionPage import Chromium

# 创建一个Chromium浏览器实例
page = Chromium()

# 获取当前标签页
tab = page.get_tab()

# 使用标签页打开指定的网页
tab.get("https://www.thepaper.cn/newsDetail_forward_26649723")

# 打开一个名为"新闻.txt"的文件,准备写入内容
# 使用"w"模式表示写入模式,如果文件已存在则覆盖,不存在则创建新文件
# 指定编码为utf-8,确保能够正确处理中文字符
f = open("新闻.txt", "w", encoding="utf-8")

# 要求获取标题信息
# 通过XPath定位页面中的标题元素
title = tab.ele('xpath://*[@id="__next"]/main/div[4]/div[1]/div[1]/div/h1')
# 向文件中插入新闻的标题
# write将标题文本写入文件,并在末尾添加换行符"\n"
f.write(title.text + "\n")

# 要求向文件中插入新闻的内容
# 通过XPath定位页面元素,获取指定容器中的内容上下文
context = tab.ele('xpath://*[@id="__next"]/main/div[4]/div[1]/div[1]/div/div[3]')
# 将文本内容写入文件,并在末尾添加换行符
# "\n" 表示换行符,确保每次写入后内容分行
f.write(context.text + "\n")

在目录下会显示创建的文件,如下所示:
在这里插入图片描述
鼠标双击该文件即会显示上面代码抓取的内容。

1. f = open(“xx.txt”, “w”, encoding=“utf-8”) - 打开文件通道

这就像你要往一个仓库里存放货物:

  • open() = 拿到仓库的钥匙并打开大门
  • “xx.txt” = 仓库的名字叫"xx.txt"(文件名,可以是相对路径或绝对路径)
  • “w” = 模式是"清空重建"(如果仓库已存在就清空,不存在就新建)
  • encoding=“utf-8” = 使用UTF-8编码规则(支持中文)来摆放货物
模式 含义 文件不存在 文件存在
“w” 写入模式 创建新文件 清空内容
“a” 追加模式 创建新文件 追加内容
“r” 读取模式 报错 读取内容

2. f.write(xx.text + “\n”) - 写入内容

这就像通过打开的大门往仓库里搬运货物:

  • f.write() = 使用这个文件通道来写入内容

  • xx.text = 要存放的具体货物内容(要写入的文本内容)

  • “\n” = 在货物后面加一个"换行标记",就像给货物贴个分隔标签(让每次写入的内容单独占一行)
    为什么需要 + “\n”?

  • 没有"\n":多次写入的内容会连在一起

  • 有"\n":每次写入的内容单独成行,更清晰

三、搜索自动化案例

# 导入 RPA 模块
from DrissionPage import Chromium

# 初始化浏览器对象
page = Chromium()

# 获取当前标签页
tab = page.get_tab()

# 使用tab对象访问百度网站
# 完整的URL包含了查询参数tn,用于指定搜索结果的来源
tab.get("https://www.baidu.com/?tn=49055317_63_hao_pg")

# 通过xpath获取文本框
input_data = tab.ele('xpath://*[@id="kw"]')

# 在文本框中输入内容
input_data.input("西游记小说精彩片段百度文库")

# 使用xpath获取按钮
btn = tab.ele('xpath://*[@id="chat-submit-button"]')

# 点击操作
btn.click()

# 使用xpath获取链接
btn_links = tab.ele('xpath://*[@id="2"]/div/div/div/div[1]/div/h3/a/div/div/p/span/span/span')

# 点击操作
btn_links.click()

# 创建新标签页
new_tab = page.latest_tab

# 关闭原先的标签页
tab.close()

# 创建一个"西游记小说"文件,用来存放抓取的内容
f = open("西游记小说.txt", "w", encoding="utf-8")
# 抓取新标签页内容
context = new_tab.ele('xpath://*[@id="app-left"]/div/div/div/div[2]/div/div[1]/div[1]/div/div/div/div/div/div/div[1]')
# 将新标签页的内容打印在文件中

# 将文本内容写入文件
# 使用write方法将context对象的text属性值写入到文件f中
f.write(context.text)

# 关闭文件
# 在文件操作完成后,应当关闭文件以释放系统资源
f.close()

1. input_data.input(“xxx”) - 智能输入填充

input_data.input()是直接找到输入框→瞬间填入完整内容,一次性填入完整的"xxx"字符串内容,input()模拟了真实的输入事件,让网页能检测到内容变化

2. btn.click() - 精准点击执行

btn.click() 是直接定位按钮→模拟真实点击动作,click()触发完整的鼠标点击事件

Logo

DAMO开发者矩阵,由阿里巴巴达摩院和中国互联网协会联合发起,致力于探讨最前沿的技术趋势与应用成果,搭建高质量的交流与分享平台,推动技术创新与产业应用链接,围绕“人工智能与新型计算”构建开放共享的开发者生态。

更多推荐