pu369com

爬虫你还在用selenium吗,out了!试用DrissionPage

selenium太难记了,试试DrissionPage是否更人性化一些

先说一下安装试用的3个坑

坑1.我把脚本名叫DrissionPage.py  运行时提示循环引用错误,

不能用DrissionPage这个名称作为脚本名(这个坑是自己挖的:-;)。

坑2.我默认华为云时,pip install DrissionPage  找不到,提示404

改为害人的腾讯:

pip install -i https://mirrors.cloud.tencent.com/pypi/simple DrissionPage

安装成功,然后可选:pip install DrissionPage --upgrade

坑3.chrome无法正常打开网页

我参考官方(https://g1879.gitee.io/drissionpagedocs/)入门指南 准备工作 中的 第2种办法:在项目目录下打开cmd命令行窗口,运行:

dp -p “D:\你的Chrome所 在 目 录\chrome.exe”

执行官方基本概念中的示例脚本:

from DrissionPage import ChromiumPage

# 创建页面对象
page = ChromiumPage()
# 控制浏览器访问百度
page.get('https://www.baidu.com')  # 使用页面对象访问
# 定位输入框并输入关键字
page.ele('#kw').input('DrissionPage')
# 点击“百度一下”按钮
page.ele('@value=百度一下').click()

成功,但是打开的浏览器无法手工关闭,可以通过任务管理器来结束,或者在代码最后加上一句  page.quit()。

坑4:在登录状态下,用任务管理器结束掉chrome以后, 下次运行代码时竟然仍保持着登录状态!

其实这也是好事,可将登录代码与登录后操作的代码分开执行,在调试阶段就不用总去登录了。

坑5:用鼠标点某个页面链接无反应。其实这不是DrissionPage 的问题(后面升级4.0后这个坑就没有复现了),

事实上通过DrissionPage 我才对那个网页有了更深的认识,

具体是这样的:

该网页上有href,当鼠标移动在href文字上时,才会执行js在href右边显示一张图片。

当用selenium时,直接click这个href,就会执行相应的js并在新标签页中打开链接

而用DrissionPage ,click这个href无效,这时:

手工操作的办法是:

用鼠标移动到href上,再用鼠标点击href右边的图片

用代码:

直接用类似ele2 = ele1.ele('xpath://span/img')查找到那个href旁边img,然后ele2.run_js('this.click();'),就可以有点击的效果。

总之:写代码的体验比用selenium好,尤其是有详细的官方中文文档。

更多用法参考官方文档  https://g1879.gitee.io/drissionpagedocs/

 补充:

虽然是中国人出品的东东,但用type竟然不能输入中文,看了gitee上作者在17天前刚增加了input, 可用以下代码更新为开发版本:

pip install "git+https://gitee.com/g1879/DownloadKit.git@dev"

pip install "git+https://gitee.com/g1879/DrissionPage.git@dev"

现在可以用input输入中文了,但是代码有些变化,比如:ActionChains 变成了 Actions  具体参考4.0版本:https://g1879.gitee.io/drissionpagedocs/whatsnew/4_0/#_12

或者用官方升级4.0的命令

pip install DrissionPage==4.0.0b26

 

另外针对4.0版本代码无法正常启动浏览器的问题,要修改Python安装目录下的Lib\site-packages\DrissionPage\_configs\configs.ini 中的 browser_path 为本机的chrome.exe全路径

看来这玩意还在新鲜出炉当中。但是用起来已经比selenium要爽很多了。

比如,用以下代码代替以前的selenium的,代码更简单,速度、可靠性、稳定性还好很多

from DrissionPage import ChromiumPage

page = ChromiumPage()
page.get('http://192.168.1.9')  # 访问网站
page.actions.move_to('#loginid').click().type('你的username')#动作链太爽
page.actions.move_to('#userpassword').click().type('你的password')
page.actions.move_to('#submit').click()
page.actions.move_to('@title=事宜').click()
while page.wait.ele_displayed('流程'):#根据文字判断元素出现了
    page.actions.move_to('流程').click()#js会打开新tab标签页
    tab = page.wait.new_tab()#等待新tab打开也很爽
    tab = page.get_tab(0)#取得新tab标签页
    tab.wait.ele_displayed('意见') #这里不判断的话会出错
    tab.actions.move_to('意见').click().input("已签到")#根本感觉不到这是在iframe里,也太爽
    tab.wait.ele_displayed('tag:button@@class:ant-btn ant-btn-primary')
    tab.actions.move_to('@@type=button@@class:ant-btn ant-btn-primary').click()#js会自动关闭这个标签页,然后继续循环

 

posted on 2023-12-21 16:56  pu369com  阅读(1354)  评论(0编辑  收藏  举报

导航