范文健康探索娱乐情感热点
投稿投诉
热点动态
科技财经
情感日志
励志美文
娱乐时尚
游戏搞笑
探索旅游
历史星座
健康养生
美丽育儿
范文作文
教案论文

python3爬虫使用Selenium带Cookie登录并且模拟进行表单上传文件

  前文再续,书接上一回,之前一篇文章我们尝试用百度api智能识别在线验证码进行模拟登录:Python3.7爬虫:实时api(百度ai)检测验证码模拟登录(Selenium)页面,这回老板又发话了,编辑利用脚本虽然登录成功了,但是有一些表单还是得手动上传,希望能改造成自动化流程。说实话,没毛病,机器能干的事,就没必要麻烦人了,拿人钱财,替人办事,开干。
  首先理清思路,没必要每次登录都去实时监测识别登录页面的验证码,而是反过来想,当我们登录成功了,必然在cookie里留下标识符比如token之类的,那么我们直接带着这些cookie去请求页面,就可以在cookie有效期内随时登录这个系统了:https://www.dianxiaomi.com/package/toAdd.htm
  登录成功后,将cookie写入本地文件 #登录按钮 driver.find_element_by_id("loginBtn").click()   time.sleep(5) #写入cookie cookie = driver.get_cookies() print(cookie) jsonCookies = json.dumps(cookie) with open("mycookie.json", "w") as f:     f.write(jsonCookies)  driver.close()
  该网站的完整客户端cookie是下面这样的: [{"domain": "www.dianxiaomi.com", "httpOnly": true, "name": "JSESSIONID", "path": "/", "secure": true, "value": "CF9D26CDE18C5E64D526A27E15A3C912"}, {"domain": "www.dianxiaomi.com", "expiry": 1614916412.601984, "httpOnly": true, "name": "dxm_s", "path": "/", "secure": false, "value": "i1ANvJM8Z1E09EI9GpL3EK9YrG86wCOxjxDNlSsYx8w"}, {"domain": "www.dianxiaomi.com", "expiry": 1614916412.601953, "httpOnly": true, "name": "dxm_t", "path": "/", "secure": false, "value": "MTU4MzgxMjQwMyFkRDB4TlRnek9ERXlOREF6ITIyZmY2NmQwYzI4N2Q2NTAyMWMyODI0NTZiZjAyY2Vi"}, {"domain": ".dianxiaomi.com", "httpOnly": false, "name": "Hm_lpvt_f8001a3f3d9bf5923f780580eb550c0b", "path": "/", "secure": false, "value": "1583812417"}, {"domain": "www.dianxiaomi.com", "expiry": 1614916412.601937, "httpOnly": true, "name": "dxm_i", "path": "/", "secure": false, "value": "NTcwNzY0IWFUMDFOekEzTmpRITIyMWMyM2ZkOWNlZWM3OGZhZDVhOWVkMjFiNmYyZTE4"}, {"domain": "www.dianxiaomi.com", "expiry": 1614916412.601964, "httpOnly": true, "name": "dxm_c", "path": "/", "secure": false, "value": "OU5TbmdOT1ohWXowNVRsTnVaMDVQV2chM2FkMjJiODc3MjE3MWUwMzI2NWMzODU5MGVkNTFlODk"}, {"domain": "www.dianxiaomi.com", "expiry": 1614916412.601974, "httpOnly": true, "name": "dxm_w", "path": "/", "secure": false, "value": "ZDgwNWNmMTA0YjdmZDQ3NzE4M2I4N2IxOTM3YzA0NDchZHoxa09EQTFZMll4TURSaU4yWmtORGMzTVRnellqZzNZakU1TXpkak1EUTBOdyE1NmZiYjFmNGZmNTNlZjVkNzJiZWNkMDM3Y2ExODNhNA"}, {"domain": ".dianxiaomi.com", "expiry": 1899172409, "httpOnly": false, "name": "_ati", "path": "/", "secure": false, "value": "133580155964"}, {"domain": ".dianxiaomi.com", "expiry": 1615348416, "httpOnly": false, "name": "Hm_lvt_f8001a3f3d9bf5923f780580eb550c0b", "path": "/", "secure": false, "value": "1583812407"}]
  东西确实不少,不过也没必要进行深究,能用就行,下面一步操作就是如何利用这些cookie直接进入网站的订单页面
  将刚才写好的cookie文件存入变量 str="" with open("mycookie.json","r",encoding="utf-8") as f:     listCookies=json.loads(f.read()) cookie = [item["name"] + "=" + item["value"] for item in listCookies] cookiestr = "; ".join(item for item in cookie) print(listCookies)
  这里有个小坑,就是格式一定得是半角分好外加一个半角空格,否则装载的时候会报错
  随后将变量中的cookie装载到selenium的头部信息里 driver = webdriver.Chrome() driver.get("https://www.dianxiaomi.com/package/toAdd.htm")   for cookie in listCookies:     if "expiry" in cookie:         del cookie["expiry"]     driver.add_cookie(cookie)  driver.get("https://www.dianxiaomi.com/package/toAdd.htm")
  这里注意两点,就是要先打开页面,装载cookie成功,再次刷新页面,另外cookie里有一个key是不能装载的,就是expiry,所以先行删除,不过我始终认为这是selenium的一个bug,感觉可以提一个issue下个版本改进一下。
  可以看到成功免登陆进入了订单页面
  当我们准备进行上传文件的时候,发现了一个小问题,就是这个网站上传模块是使用的第三方插件进行的,类似element-ui或者Ant Design这种的,带来的问题就是,传统表单被认为的隐藏了,而众人皆知的是,selenium是无法操作隐藏的元素的。
  不过没关系,兵来将挡水来土掩,可以利用js脚本将表单属性手动设定为显示状态 #利用脚本显示元素 js = "document.getElementById("select_btn_1").style.display="block";" # 调用js脚本 driver.execute_script(js) time.sleep(3)
  剩下的就好办了,利用xpath点选上传按钮,然后附加上准备好的excel文件 driver.find_element_by_xpath("/html/body/p[18]/p[2]/p[2]/button[1]").click()  driver.find_element_by_id("select_btn_1").send_keys(r"/Users/liuyue/wodfan/work/mytornado/cccc.xlsx")  time.sleep(2)
  具体自动化效果是下面这样
  完整代码: import json from selenium import webdriver import time    str="" with open("mycookie.json","r",encoding="utf-8") as f:     listCookies=json.loads(f.read()) cookie = [item["name"] + "=" + item["value"] for item in listCookies] cookiestr = "; ".join(item for item in cookie) print(listCookies)   driver = webdriver.Chrome() driver.get("https://www.dianxiaomi.com/package/toAdd.htm")   for cookie in listCookies:     if "expiry" in cookie:         del cookie["expiry"]     driver.add_cookie(cookie)  driver.get("https://www.dianxiaomi.com/package/toAdd.htm")  driver.find_element_by_class_name("btn-gray").click()  js = "document.getElementById("select_btn_1").style.display="block";" # 调用js脚本 driver.execute_script(js) time.sleep(3)  driver.find_element_by_xpath("/html/body/p[18]/p[2]/p[2]/button[1]").click()  driver.find_element_by_id("select_btn_1").send_keys(r"/Users/liuyue/wodfan/work/mytornado/cccc.xlsx")  time.sleep(2)  driver.find_element_by_xpath("/html/body/p[21]/p[2]/p/p[3]/button[1]").click()   time.sleep(60) driver.close()
  结语:不得不说,selenium确实是个好东西,整个自动化上传文件流程就好像丝绸般顺滑,只不过在操作cookie的时候有一些坑,需要注意一下。

李铁事件后中国U15足球赛再爆踢假球,恒大足球校长免职并开除2022世界杯刚落下帷幕,球迷们都非常希望国足能够晋级世界杯,真正地为自己的球队加油助威,而不是国外球队。可是,连这仅剩一点的希望再遭打击,先有李铁利用职务之便,带头踢假球,获取非全新打造的轻量化!酷冷至尊天狼星无线版MM712匠心上市酷冷至尊天狼星系列轻量化游戏鼠标自从上市到现在,一直都是游戏爱好者的首选装备,作为轻量化的先锋,酷冷至尊又打造了全新的轻量化的的鼠标天狼星的无线版本MM712游戏鼠标,将于2022苹果好,英特尔不好,真的是这样吗?在WWDC2005苹果全球开发者大会上,史蒂夫乔布斯宣布未来所有新推出的Mac电脑将转用英特尔的X86架构芯片,并使用Rosetta(1)对采用PowerPC架构的前代产品进行指令Java企业级开发全系列1Java简介Java是一门以面向对象为核心编程思想的高级程序设计语言,它借鉴了C语言的优点,同时摒弃了C中复杂的多继承指针等概念。Java语言功能强大且简单易用。一java背景在20世纪90年K60素皮真机打几分?K60Pro支持无线充2K屏8G2对标iQOO11声音小白RedmiK60系列将于12月27日19点发布,具体有三款K60E搭载天玑8200K60搭载骁龙8K60Pro搭载骁龙8Gen2,全系2K直屏,目前核心配置屏幕规格均已预热明年,部分MacBook将在越南生产根据国外的一份报告称,MacBook最早将于2023年五月份开始在越南生产,虽然这篇文章没有具体说明该计划是指macBookair,或者MacBookPro还是两者都会包含。苹果公平民价格高端性能四款实力小钢炮手机推荐近期随着高通骁龙8Gen2手机发布原有的一些中高端手机纷纷开始调整价格。高端旗舰级芯片更新换代固然是好事,但这并不代表原有的老款芯片性能不行了,对于很多预算不足的人来讲这反而是下手降了900元,iPhone14Plus年底增销量,不再是铁公鸡在手机界,保值率最高的代表一直是iPhone,就算是今年买的iPhone,放到明后年出手也还能卖一个好价钱,就像是汽车中的丰田,不管时间过去多久,始终都有人想要。但比较尴尬的是,今为什么玩游戏会上瘾早在94年,当时比较高端的486电脑,先从如何开机开始,到简单的DOS命令,再到键盘打字,然后是简单的办公软件。另外要说明一下背景。那时学校德育的重头是让学生们远离三室一厅游戏室录2023新旗舰盘点一加11来势汹汹,三星华为谁更能吸引人?年底的这段时间有不少关于新机即将发布的消息传出,相信有不少小伙伴都已经看到消息了,不过对于打算换机的人来说,到底哪些即将发布的机型才是值得去关注的呢?小编今天汇总了三款有新消息传出一年巨亏4亿!一直涨价的共享充电宝还在亏钱?你有多久没有用过共享充电宝了?5年前,当王思聪在自己的微博吐槽如果共享充电宝能成,我直播吃翔,立帖为证之时或许怎么也没能想到5年后的今天,国内的大街小巷上仍旧到处都能见到共享充电宝
父亲的话三年疫情在全面开放后告一段落,随着新的一年的开始,希望自己糟糕的人生也随之烟消云散。假期尾声的钟声的响起,宣告自己即将踏上新的征程,临别之季,有幸有时间伴随父母在家中小坐,聊聊家常你看,他好像一条狗啊大话西游,它是我心中的无冕之王,没有之一第一次看,我笑了第二次看,我流泪了第三次看,我怔住了第四次看,我感觉到了深入骨髓的悲哀和无奈每看一次,就得把心扒开一层我才知道,原来有些故事两性关系,10条甜到心间的情话(五)1hr千金易得,知音难觅,所以遇见你之后,我就希望从今往后和你一起走下去。2hr自从看见你的第一眼,就希望和你手牵手在月光下漫步,在灯光下谈心。3hr我的要求其实不多,只想在有生之为什么很多70岁的老人,过不了几年就去世了?源于双重压力的冲击让世界听见你的声音每个人都无法避免衰老,感知身体的机能退化,但我们真的能坦然面对吗?从婴儿时期到老年时期,我们可以慢慢接受,但是经历了一辈子的人,他能允许自己退化成婴儿吗?婴儿期最一个人越厉害,越懂得不动声色01hr或许你的身边就有这样一个人,不管面对怎样的事情,他都能做到急而不燥,忙而不乱。从始至终都是一副不动声色的样子,而他的生活也是有条不紊的。或许这就是人们常说的有福不用忙,无福生活实录穿马扎绳的老人文张维明于老汉坐在巷口的老地方,嘴里叼着一根烟,一副悠闲自得的模样。马扎旁边,放着那个装工具的红色提兜一个原本装酒的旧袋子。紧挨着的还有一个黑塑料袋,系着的扣子还没解开。不远处商铺汉武帝为何逼死自己的儿子刘据,有哪些因素影响着汉武帝的抉择?公元前91年,西汉宫廷爆发了一场前所未有的变乱,在这场变乱中曾经辉煌显赫的卫氏家族被屠戮殆尽,史称巫蛊之祸。汉武帝和皇后卫子夫所生的太子刘据,也受到此事牵连被杀刘据是汉武帝精心培养指纹为何都是独一无二的地球上再也没有人拥有你完全一样的指纹。即使你碰巧有一个同卵双胞胎,你手脚指头上的漩涡状脊纹也将是你所独有的特征。科学家们一直想知道是哪些因素决定了指纹图案的唯一性。一支国际研究团队我的孕期日记2023年1月18日,这是乔迁新家的日子,距离我的预产期(1月23日)还有最后5天。新家不在市区我跟老公一直租住在市区备产并且也跟就近的社区联系好月子期间产后的回访以及宝宝预防针的一场渐行渐远分离的爱以前看这段话,只是觉得写的不错,但体会不了其中的感情。有了娃以后,偶然间想起了这段话,有了直击心灵的感觉。我的宝宝从出生一直就是我亲力亲为,虽然累到挨枕头就着,但我很喜欢他依赖我的建厂狂人王东升交棒3年京东方逆势扩产,盈利水平退回2017年本文来源时代周报作者郑栩彤面板企业业绩集体不振,龙头京东方A(000725。SZ)也深陷低谷。据时代周报记者统计,2022年,海外多家面板厂商亏损,国内至少也有5家厂商宣布扣非净利