作者归档:Fidum

web自动化-selenium

基础使用不再赘述;

  • 开发使用有界面浏览器,部署使用无头浏览器
  • 基于css选择器的话,可以试试在浏览器直接复制元素的selector
  • 还有name属性
    selenium使用cookie:

添加:
driver.add_cookie({'xx':'xx'})
删除:
driver.delete_cookie('name')
driver.refresh()
获取:
get_cookies()

file
下面重点看一下元素定位不到的几种情况以及处置方式

1.元素未加载完成

网络延迟或者JavaScript渲染,可能会找不到

解决方式:添加对应的等待时间,让元素充分加载完成后再进行具体的操作,等待的三种方式:

  • 强制等待;
    固定时间,比较死板
    举例:

    time.sleep(3)

  • 显式等待
    设定一个时间,程序自动在这段时间内反复寻找目标元素,超时报错
    举例(比如最多等5秒):

    from selenium.webdriver.support import expected_conditions as EC
    from selenium.webdriver.support.wait import WebDriverWait
    el = WebDriverWait(driver, 5).until(EC.presence_of_element_located((By.XPATH,'xxxx xpath')))
    el.click()
  • 隐式等待
    原理和显式等待类似
    举例:

    driver.implicitly_wait(3)

2.iframe或frame内的元素

iframe或frame内的元素,是无法直接定位的,那么必须要先切换,才能进行元素定位
例如:

driver.switch_to.frame(xxx)
driver.switch_to.frame(driver.find_element_by(By.XPATH,'frame的xpath'))
切换进去后,在进行find元素的操作
driver.switch_to.default_content() #返回根frame
driver.switch_to.parent_frame() #返回上一级frame

3.元素id或者属性是变化的

页面中同一元素的xpath(浏览器直接复制的)每次刷新都会变的时候,需要我们根据网页结构手写xpath。
例如:
以xxx开头或以xxx结尾或包含xxx的元素
file
不管成功与否,都提取text:
file

4.元素不可交互

  • 元素是通过JavaScript动态生成的,那么元素不在html中,使用selenium无法直接定位,那么可以通过编写JavaScript脚本对元素的强制操作或者属性修改之后再进行定位操作。
  • selenium支持嵌入JavaScript脚本的执行;
    网上类似的解决方案有很多,比较简单的事在一个页面里面通过JS程序修改页面上的内容:
    原博文:Python在selenium里面注入JavaScript程序的方法【20210815】
    主要方法:driver.execute_script("JS脚本内容")

5.元素被遮挡

元素被广告、弹窗等遮挡,可以刻通过编写JavaScript脚本实现
也可以通过JavaScript对页面上的元素实现监听,对出来的元素及时进行相应的操作,JavaScript中可以使用MutationObserver接口来实现DOM数是否改变的监听。

6.特殊元素的处理

  • 警告框
    alert、confirm、prompt、input等等
    file

页面跳转需要切换驱动,比如点击了某个超链接打开了新的页面
file

公司值班建单系统自动建单的实现的思路:
先用selenium实现个人账号的登录,并且拿到对应的cookie,将cookie字典化;
然后使用request模块携带刚刚拿到的cookie和payload向对应接口发送post请求,拿到需要建单的元素项。
再想办法将拿到的元素传给selenium,进行后续的建单操作

file

发现新大陆--requestium,奶奶个腿

6月16日4:09记

这一次,我没有回家,却有望重获新生。

之前,北漂久了,人麻木了,回趟家是个很好的选择,回到家乡,看看儿时玩过的小溪、水库、充满回忆的学校,沐浴着家乡的阳光,呼吸着田埂间清新的气息,不用刻意做什么,能量瞬间充满全身,我感恩,我的童年是相对幸福的。起码,比现在幸福吧。

刚看完一集老高和小茉的视频,大概是讲如何消除烦恼,里面提到了一个小办法,就是有烦恼就写下来,我差点忘记了这个这个方法,本来之前用过的,人脑烦心事的处理总是混乱的,但写下来,你再用眼睛直观的去看,可能就清晰了。

我真的烦透了世俗中人的各种试探,甚至让我反胃,低略的手段让我感觉俗不可耐,有时间吧,试探我的人还是我平时认为关系还不错的,这样我就为难了,因为我不知道我是该精心编个故事骗骗你呢,还是风轻云淡的随意敷衍一下。什么?你想要我内心的正确答案?我靠,你真是不仅智商低下还爱做白日梦。

扯远了啊,说重获新生呢,谁家孩子有这样重获新生的。不行,有点困了~

公平?扯淡

  谨记,社会是不公平的,你也要去参与资本掠夺,不要追求社会公平,否则你一直被剥削,永远成不了事。
  所以,你(我)要适应不公平,如果你主张了不公平的事情,那么你还要若无其事的展现出公平的态度,或许认总要变成自己讨厌的样子吧!

如果自己不能做到,就不要去歧视别人

  很多时候,我们对世间各种残暴犯罪或者不道德的事件予以很多的谴责,这和我们受的教育相关,社会本该如此,非常合情合理,但如果从犯罪分子的角度去考虑问题,会得到不一样的感悟,有句话怎么说来着:未经他人苦,莫劝他人善。
  如此,你敢说当你穿上犯罪分子的鞋子,走他走过的路,感悟他所感悟,绝望他所绝望,你还敢说你能做出更好的选择吗?
  我们很多时候谴责某某某怎么怎么滴,但如果你是他,你当时会不会有一样的邪念,一样的犯罪的冲动,如果你真的可以做到风轻云淡内心毫无动摇,你再去歧视别人,如果你有和他相同的欲望,那你和他就是同一类人,只是你没有犯罪的机会罢了。
  自己都管不好自己内心的欲望,又有什么资格去瞧不起他人,凡事多问问自己的内心,如果自己身临其境,该如何选择,而不是和社会上那些被自媒体洗脑了的行尸走肉一样,只知道一味对犯罪分子嗤之以鼻。
  所以,这种被外界带偏的思想,其实也是一种偏见。另外,偏见无处不在,在你我身边各个地方都有,每个人对其他很多人都或多或少带有一些偏见,其实这是很不好的。
  切记,要忠于内心,忠于自己。

允许一切如其所是

至此2024新年初始之时,回首往日,诸多感慨,下面这首诗陪伴我多年,已深入我心,现分享如下,望世间蔼然仁者,皆能不受焦虑抑郁折磨,一往无前去爱不完美的自己,也去爱这个不完美的世界。

《我允许》
--- 海灵格
我允许任何事情的发生,
我允许事情是如此的开始,
如此的发展,如此的结局。
因为我知道,
所有的事情,都是因缘和合而来。
一切的发生,都是必然。
若我觉得应该是另外一种可能,
伤害的,只是自己。
我唯一能做的,
就是允许。

我允许别人如他所是,
我允许他会有这样的所思所想。
如此的评判我,如此的对待我,
因为我知道,
他本来就是这个样子。
在他那里,他是对的,
若我觉得他应该是另外一种样子,
伤害的,只是自己。
我唯一能做的,
就是允许。

我允许我有了这样的念头,
我允许每一个念头的出现。
任它存在,任它消失,
因为我知道,
念头本身本无意义,与我无关。
它该来会来,该走会走,
若我觉得不应该出现这样的念头,
伤害的,只是自己。
我唯一能做的,
就是允许。

我允许我升起了这样的情绪,
我允许每一种情绪的发生。
任其发展,任其穿过,
因为我知道,
情绪只是身体上的感受,
本无好坏,
越是抗拒,越是强烈。
若我觉得不应该出现这样的情绪,
伤害的,只是自己。
我唯一能做的,
就是允许。

我允许我就是这个样子,
我允许我就是这样的表现。
我表现如何,就任我表现如何,
因为我知道,
外在是什么样子,只是自我的积淀而已。
真正的我,智慧俱足。
若我觉得应该是另外一个样子,
伤害的,只是自己。
我唯一能做的,
就是允许。

我知道,
我是为了生命在当下的体验而来,
在每一个当下时刻,
我唯一要做的,就是
全然地允许,
全然地经历,
全然地享受,
看,只是看。

别等某件事完成了再去快乐

可是生活不是在某个节点后才开始的,我不能等没有困难了再开始快乐

生命中每个阶段都有每个阶段要完成的事情,不要等完成某件事情再去让自己快乐,快乐是一种选择,如果万事不如意,就要哄自己开心!