admin管理员组文章数量:1567044
目录
- 提前了解
- 分析
- 代码
- 源码
提前了解
- 开发者工具:windows系统下,浏览器一般都有开发者工具,这能帮助我们分析网页的元素、提取网页中的目标信息。在目标网页启用工具有两种方式,分别是鼠标右键“检查”选项和三点菜单—更多工具—开发人员工具(F12键也行,读者可通过浏览器设置开启“开发人员模式”尝试,但我的好像坏了),如下图:
启用开发者工具后如下图:
- 动态网页:就是不对网页进行操作(点击、滚动等),网页上某些元素就处于隐藏状态,这时使用requests库无法获取这些隐藏信息。有些网页的结构是一个frame套着一个frame,比如进入QQ音乐官网就是一个frame,点击“登录”后出现小一点的登录界面,就是一个新frame嵌在里面,但是不点击“登录”开发者工具也看不到,
- selenium库:可以模拟人完成一些对网页的事件,如点击、滚动、键入信息等。因此可以用来读取动态网页的信息。不过还需搭配浏览器驱动webdriver,需要下载的读者请点击:selenium库支持的几种浏览器。对于其他浏览器,读者可以利用代码提示功能在语句“webdriver”后查看,如果没有,自行搜索如何下载对应驱动。
- 使用selenium库做爬虫的常用语句:
- 打开浏览器(Edge为例)
from selenium import webdriver browser = webdriver.Edge()
- 访问url
browser.get(url)
- 找目标元素
from selenium.webdriver.common.by import By element = browser.find_element(By.CLASS_NAME, 'qq') # By里面有XPATH、ID、NAME等其他匹配方式
- 转换frame
browser.switch_to.frame(new_frame)
- 回到父frame
browser.switch_to.parent_frame()
- 关闭浏览器
browser.quit()
- 打开浏览器(Edge为例)
分析
逐步分析PC端QQ腾讯文档打卡的网页,与在QQ直接打开打卡链接不同的是,使用selenium打开的网页需要登录腾讯文档。由此,以Edge浏览器为例,启动开发者工具,开始分析打卡过程中网页内容的变化。
首先使用selenium和安装的浏览器驱动打开QQ腾讯文档打卡链接,如下图:
使用开发者工具分析如下:
注意:可以点击黑色圆圈中的图标,再点击网页上的目标元素,即可迅速在工具中定位出目标代码,如红色圈住的部分!
需要先登录才能打卡,因此需要点击“登录腾讯文档”,在工具中可以看出目标元素“登录腾讯文档”具有“id”和“class”等属性,可以用来定位代表“登录腾讯文档”的button。如果报错、定位不了,可以使用XPATH定位,在工具中使用快捷键“Ctrl + F”,出现搜索框,接着按照像“html”、“div”、“button”这样的元素标签,输入路径如下,相同的标签从1开始计使用“div[1]”表示,如下图:
在工具中XPATH路径正确,则目标元素如上图高亮,该路径就能在代码中用来定位。以上就是利用开发者工具定位目标元素的方法,后面不再赘述。
点击“登录腾讯文档”,接着出现下图:
需要选择登录方式,我们选择点击中间的“QQ登录”,于是出现下图:
这里需要注意,下图中,在工具中出现两个红圈中的“iframe”标签,表明就是依次嵌套的两个子frame,因此必须转换frame才能定位到大红圈中的“密码登录”链接元素。当然,如果后面需要操作最外面的主frame的元素,必须回到主frame才能定位。
点击“密码登录”,出现下图:
我们键入自己的QQ账号与密码,接着点击“登录”,出现下图:
此时点击“获取定位”,并点击“提交”,还会出现最后的确认界面如下:
点击“确认”,完成打卡。
代码
以下代码非完整项目代码,不可直接复制使用,但“分析”部分提到的操作都实现了,读者需要定义代码中字符大写的变量并且也是同样的QQ腾讯文档打卡才可以直接使用。此外,我将代码包装成了PC-Windows版exe应用文件,可以实现每天自动打卡(我以前总是忘记打卡,就搞了个这么小东西),需要的读者可以看向源码部分,但是这里事先说明:因为个人能力有限且是在本人设备上(Windows11+Edge浏览器)开发的,所以我自己用的十分顺利;给我同学测试后,有不少问题,首先浏览器推荐Edge,其他的不建议,其次,前面提到的QQ登录极有可能因为网络环境、浏览器、设备等复杂原因导致登录出现验证码环节,然后失败,这里建议自己尝试登录,让浏览器“熟悉熟悉”你的QQ登录,记住快捷登录方式,这样就能自动登录打卡了。总之,还是我自己用的最没毛病,读者可能要“看运气”,哈哈哈。
def login(browser=BROWSER):
'''登录'''
browser.get(URL)
sleep(SLEEP_TIME)
# 根据打卡url进入打卡网页
button = browser.find_element(By.XPATH, 'html/body/div[9]/div[1]/div[1]/div[9]/div[1]/button')
button.click()
sleep(SLEEP_TIME)
# 找到“登录腾讯文档”按钮并点击
link1 = browser.find_element(By.CLASS_NAME, 'qq')
link1.click()
sleep(SLEEP_TIME)
# 找到“QQ登录”选项并点击
new_f = browser.find_element(By.ID, 'login_frame')
browser.switch_to.frame(new_f)
new_ff = browser.find_element(By.ID, 'ptlogin_iframe')
browser.switch_to.frame(new_ff)
sleep(SLEEP_TIME)
# 通过开发者工具查看网页,下面的QQ“密码登录”选项在第三层frame
# 将frame转换到第三层frame,不然找不到QQ登录界面的元素
link2 = browser.find_element(By.ID, 'switcher_plogin')
link2.click()
sleep(SLEEP_TIME)
# 找到QQ的“密码登录”选项并点击
accout_in = browser.find_element(By.ID, 'uinArea')
accout_in.click()
sleep(SLEEP_TIME)
# 找到账户名输入框并点击
accout_in = browser.find_element(By.CLASS_NAME, 'inputstyle')
accout_in.send_keys(ACCOUNT)
sleep(SLEEP_TIME)
# 进入账户输入框后输入账户名
pass_in = browser.find_element(By.ID, 'pwdArea')
pass_in.click()
sleep(SLEEP_TIME)
# 找到密码输入框并点击
password_in = browser.find_element(By.ID, 'p')
password_in.send_keys(PASSWORD)
sleep(SLEEP_TIME)
# 进入密码输入框后输入密码
login_b = browser.find_element(By.CLASS_NAME, 'login_button')
login_b.click()
# 找到QQ的“登录按钮”并点击
browser.switch_to.parent_frame()
sleep(SLEEP_TIME)
browser.switch_to.parent_frame()
sleep(SLEEP_TIME)
# 前面转换过两次frame,因此需要回退两次父frame
link3 = browser.find_element(By.CLASS_NAME, 'location-btn')
link3.click()
sleep(5)
# 点击“获取定位”
link4 = browser.find_element(By.CLASS_NAME, 'question-commit')
link4.click()
sleep(5)
# 点击“提交”
link5 = browser.find_element(By.XPATH, '/html/body/div[16]/div/div[4]/button[2]')
link5.click()
# 点击最后的“确认”
sleep(5)
browser.quit()
# 终止webdriver和一切网页进程
源码
完整的项目源码
创作不易,如果有所帮助,求点赞收藏!谢谢!
版权声明:本文标题:【Python爬虫】动态网页爬虫构建,selenium库简单使用,PC端QQ腾讯文档自动打卡爬虫完整项目 内容由热心网友自发贡献,该文观点仅代表作者本人, 转载请联系作者并注明出处:https://www.elefans.com/xitong/1725783064a1042398.html, 本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容,一经查实,本站将立刻删除。
发表评论